如何使用FFMPEG为来自网络摄像头(v4l2)的实时流添加延迟?

时间:2018-11-19 22:09:41

标签: ffmpeg video-streaming gstreamer v4l2loopback

如何使用FFMPEG为从(v4l2)网络摄像头发送到媒体服务器的流添加延迟?

这里的用例类似于安全摄像机,当视频中检测到某些东西时,我希望它能够将视频流传输到服务器。确保在视频上捕获到感兴趣的事件的最简单方法是使用FFMPEG,以增加延迟的方式将FFMPEG从摄像机流传输到虚拟环回设备。然后,当感兴趣的事件发生时,可以使用该环回设备启动实时流式传输。

在GStreamer中,我将使用queue元素的min-threshold-time参数来完成这种延迟。例如,以下(大大简化的)示例管道在显示v4l2网络摄像头之前,向来自v4l2网络摄像头的输出添加了2秒的延迟:

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 :(得分:1)

使用ffmpeg的最新git版本,基本模板是

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

tpad过滤器将在视频流开始处添加5秒的黑色,而apad过滤器将为音频的前两个通道添加5000毫秒的静音。