У меня есть программа на 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.
Кто-нибудь может объяснить, что здесь происходит? Что я делаю не так?