OpenCv + Gstreamer из приложения, получая начальную задержку в 30 секунд

Итак, мое приложение предоставляет поток RTP, используя new VideoWriter(pipeline-definition);

Определение трубопровода:

appsrc is-live=1 do-timestamp=1 format=3 stream-type=0 min-latency=0 max-latency=500000000 ! queue leaky=2 max-size-time=500000000 ! videoconvert ! video/x-raw ! x264enc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=9000

Проблема, с которой я столкнулся, — задержка потока на 30 с при просмотре в VLC. Что бы я ни делал, VLC всегда отстает на 29-30 секунд. Кажется, что appsrc вызывает это, поскольку тот же конвейер с videotestsrc вообще не имеет задержки.

Любые идеи, что я должен сделать, чтобы appsrc сразу выпускал кадры в поток?


person Wojtek Turowicz    schedule 16.08.2019    source источник
comment
Я не использовал VideoWriter, но по моему опыту, если в appsrc загружаются кадры в реальном времени, то проблема в другом. У меня была аналогичная проблема, когда мне нужно было установить sync=FALSE в моем приемнике pipleine... В вашем случае отладьте, где кадры задерживаются в конвейере, чтобы найти реальную причину.   -  person logidelic    schedule 16.08.2019


Ответы (1)


Похоже, что у VideoWriter есть внутренний буфер, который кэширует 30 секунд отснятого материала. В моем случае я хранил синглтон в памяти и полагался на то, что он достаточно быстро сбрасывается в конвейер. На самом деле мне пришлось заставить VideoWriter сбросить данные, отпустив их.

Я не рекомендую это как решение проблемы, но в моем случае это сработало, так как мне нужен этот конвейер только тогда, когда определено DEBUG.

person Wojtek Turowicz    schedule 19.08.2019