Как добавить задержку в прямую трансляцию с веб-камеры (v4l2) с помощью FFMPEG? - PullRequest
0 голосов
/ 20 ноября 2018

Как я могу использовать FFMPEG, чтобы добавить задержку для потока, отправляемого с (v4l2) веб-камеры на медиа-сервер?

В данном случае используется что-то вроде камеры безопасности, где я хочу иметь возможность передавать видео на сервер, когда что-то обнаруживается в видео. Самый простой способ обеспечить захват интересующего события на видео - использовать FFMPEG для потоковой передачи с камеры на виртуальное устройство с обратной связью с добавленной задержкой. Это устройство с обратной связью затем может быть использовано для запуска потоковой передачи в реальном времени, когда происходит даже интерес.

В GStreamer я бы выполнил такую ​​задержку с помощью параметра min-threshold-time элемента queue. Например, следующий (значительно упрощенный) пример конвейера добавляет задержку в 2 секунды к выходу, исходящему от веб-камеры v4l2 перед его отображением:

gst-launch-1.0 v4l2src device=/dev/video1 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 min-threshold-time=2000000000 ! xvimagesink

Как мне сделать то же самое с FFMPEG? Есть некоторые технические проблемы, которые мешают нам использовать GStreamer для этого.

Я исследовал вариант itsoffset для этого, но, насколько я могу судить, его можно использовать только для уже записанных файлов, и неясно, какой будет хорошая альтернатива.

1 Ответ

0 голосов
/ 20 ноября 2018

С недавней сборкой fitmg git, базовый шаблон -

ffmpeg -i input -vf tpad=start_duration=5 -af adelay=5000|5000 stream-out

Фильтр tpad добавит 5 секунд черного в начале видеопотока, а фильтр apad добавит 5000 миллисекунд тишины к первым двум каналам звука.

...