Есть у меня небольшая тестовая программа для проверки записи в rtmp-поток:
int main(int argc, char* argv[])
{
Mat frame;
VideoCapture capture;
Size imageSize;
double fps;
bool bRc;
FILE *pipe_fp;
char command[512];
int frame_count = 1;
bRc = capture.open("rtmp://video.roads.msk.ru:8080/stream/tlcam_00218_1");
if(bRc == false)
{
std::cout << "Can not open camera" << std::endl;
capture.release();
exit(0);
}
imageSize.height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
imageSize.width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
fps = 24;
std::cout << "Capture height = " << imageSize.height << std::endl;
std::cout << "Capture width = " << imageSize.width << std::endl;
sprintf(command, "ffmpeg -y -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -s %dx%d -i pipe:0 -codec:v libx264 -pix_fmt yuv420p -preset ultrafast -nostats -f flv rtmp://localhost/stream/mystream > /dev/null", imageSize.width, imageSize.height);
if(bRc == false)
{
std::cout << "Can not open output file" << std::endl;
capture.release();
exit(0);
}
if (( pipe_fp = popen(command, "w")) == NULL)
{
perror("popen");
exit(1);
}
while(1)
{
capture >> frame;
cv::Size size = frame.size();
int total = size.width * size.height * frame.channels();
fwrite(frame.data, 1, total, pipe_fp);
if(waitKey(30) >= 0)
break;
frame_count++;
}
capture.release();
pclose(pipe_fp);
return 0;
}
Проблема заключается в том, что если я запускаю ее из-под QtCreator, то все работает нормально, но когда я стартую ее из командной строки, то получаю сообщение от ffmpeg:
Unknown encoder 'libx264'
В чем может быть причина?