конвейер gstreamer, который работал сейчас, требующий кучу компонентов очереди, почему? - PullRequest
0 голосов
/ 17 октября 2010

У меня есть программа на C, которая записывает видео и аудио из источника v4l2 в формат flv. Я заметил, что программа не работает на более новых версиях Ubuntu. Я решил попробовать запустить пробламатический конвейер в gst-launch и попытаться найти самый простой конвейер, который мог бы воспроизвести проблему. Сосредоточив внимание на видео, я уменьшил его до того, что вы видите ниже.

Итак, у меня есть конвейер gstreamer, который работал:

gst-launch v4l2src ! tee name="vtee" ! queue ! videorate ! ffmpegcolorspace ! ffdeinterlace ! x264enc ! flvmux name="mux" ! filesink location=vid.flv vtee. ! queue ! xvimagesink

Теперь это будет работать, только если я сделаю это с кучей очередей, добавленных одна за другой перед xvimagesink. Хотя это работает, я получаю задержку в 2 секунды, прежде чем конвейер начинает работать, и я также получаю сообщение:

gst-launch v4l2src ! tee name="vtee" ! queue ! videorate ! ffmpegcolorspace ! ffdeinterlace ! x264enc ! flvmux name="mux" ! filesink location=vid.flv vtee. ! queue ! queue ! queue ! queue ! queue ! xvimagesink

Хотя второй вышеприведенный конвейер работает, перед началом работы конвейера возникает пауза, и я получаю сообщение (я не думаю, что эта система работает медленно, это ядро ​​i7 с тоннами оперативной памяти):

Additional debug info:
gstbasesink.c(2692): gst_base_sink_is_too_late (): /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
There may be a timestamping problem, or this computer is too slow.

Кто-нибудь может объяснить, что здесь происходит? Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Вы утверждаете, что первый конвейер перестал работать, но не объясняете, что произошло.Все перестает работать, потому что что-то еще изменилось: - версия GStreamer и подмодулей?- версия ОС?- версия камеры?

Нет необходимости добавлять несколько очередей подряд.На практике они создают границы потоков и разделяют детали до и после между потоками, и это добавляет добавленную задержку, которая влияет на задержку и синхронизацию.

0 голосов
/ 23 декабря 2011

Старое сообщение, но проблема по-прежнему не устранена.Где-то между 9.10 и 11.10 (я обновил несколько, прежде чем заметил).Я обошел его, избегая x264enc и использовал вместо него ffenc_mpeg4.

Я только что заметил это примечание от Шпаргалка Gstreamer :

Примечание: мы можем заменитьtheoraenc+oggmux с x264enc+someothermuxer, но тогда конвейер замерзнет, ​​если мы не сделаем элемент очереди [19] перед xvimagesink негерметичным, т.е. "queue leaky=1".

Что не работает для меня, поэтому я буду придерживаться ffenc_mpeg4.

...