Russian Qt Forum
Ноябрь 23, 2024, 11:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtCreator и ffmpeg  (Прочитано 4182 раз)
Hvzh
Гость
« : Декабрь 21, 2016, 19:36 »

Есть у меня небольшая тестовая программа для проверки записи в 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'

В чем может быть причина?
Записан
Bepec
Гость
« Ответ #1 : Декабрь 22, 2016, 11:28 »

Плагины надо ложить рядом с исполняемым файлом. Creator просто по своим путям всё подтягивает, а приложение и знать не знает об этом Веселый
Записан
Hvzh
Гость
« Ответ #2 : Декабрь 22, 2016, 13:35 »

Плагины надо ложить рядом с исполняемым файлом. Creator просто по своим путям всё подтягивает, а приложение и знать не знает об этом Веселый
Вообще-то логично... Но не находит ffmpeg и не находит библиотеку, которая в путях лежит. Как же ее Creator находит?
Записан
Bepec
Гость
« Ответ #3 : Декабрь 22, 2016, 15:50 »

Creator это IDE. Со своими путями/подгрузкой/дебаггером. При запуске процесса ему можно какие угодно пути задать Улыбающийся Что IDE и делает.
Записан
Hvzh
Гость
« Ответ #4 : Декабрь 24, 2016, 15:27 »

Creator это IDE. Со своими путями/подгрузкой/дебаггером. При запуске процесса ему можно какие угодно пути задать Улыбающийся Что IDE и делает.
И для ffmpeg? Странно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.146 секунд. Запросов: 20.