Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: yuv stream -> ffmpeg  (Прочитано 88 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Peter_I

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1446
    • Просмотр профиля
yuv stream -> ffmpeg
« : 06 Октябрь 2017, 21:57:32 »
Здравствуйте!

Я пытаюсь в программе на Qt сформировать yuv поток для ffmpeg, котара вызывается из скрипта.
Собственно данные берутся из QImage, RGB преобразуются в YUV, по три байта на точку и записываются в массив.
Есть QTcpServer, он включается на прослушивание порта, а ffmpeg с ним соединяется, когда запускается скрипт с её вызовом.
Когда наступает соединение, создаётся QTcpSocket, через него передаётся заголовок потока:
YUV4MPEG2 W1280 H1024 F24:1 Ip C444с '\n' в конце. Затем предполагается, что перед каждым кадром будет передаваться слово FRAME с '\n' в конце,
но до этого не доходит: как только я посылаю заголовок, соединение разрывается, притом мгновенно:
по показаниям gettimeofday(), от установки соединения до разрыва не проходит и одной микросекунды,
т.е. разница во времени 0, хотя после соединения что-то печатается, создаётся сокет, посылается заголовок,
выполнняются 4 оператора connect и снова что-то печатается.

В скрипте для вызова ffmpeg есть строки:
echo 3 <> /dev/tcp/${hostn}/$nprt

/usr/bin/ffmpeg -v error -f yuv4mpegpipe -i 3 -r $fps -vcodec $vcod \
-vpre libx264-ultrafast-old -f avi ${fflnm}_v.avi \
tcp://${hostn}:${nprt}?listen&timeout=12000000  >& $pprne &

Никаких ошибок от ffmpeg не выводится, сама она вызывается, но тут же прекращается.
Это выполняется на одном компьютере, все переменные правильные, так что соединение происходит.
Конструкция
tcp://${hostn}:${nprt}?listenдолжна быть последней в команде для ffmpeg, т.к. всё что после неё, ffmpeg игнорирует.

Не скажете ли, в чём ошибка? В заголовке, в вызове ffmpeg и какая? Или как вообще надо?
Пётр.

 

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