如何使用 FFMPEG 为来自网络摄像头 (v4l2) 的实时流添加延迟?
How do I add a delay to a live stream sourced from webcam (v4l2) with FFMPEG?
如何使用 FFMPEG 为从 (v4l2) 网络摄像头发送到媒体服务器的流添加延迟?
这里的用例类似于安全摄像头,我希望能够在视频中检测到某些内容时将视频流式传输到服务器。确保在视频中捕捉到感兴趣的事件的最简单方法是使用 FFMPEG 从摄像机流式传输到虚拟环回设备,并增加延迟。当感兴趣的事件发生时,该环回设备可用于启动直播。
在 GStreamer 中,我将使用 queue
元素的 min-threshold-time
参数来完成此类延迟。例如,以下(大大简化的)示例管道在显示来自 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
选项,但据我所知,它仅适用于已录制的文件,目前尚不清楚什么是好的替代方案。
使用最近 git 构建的 ffmpeg,基本模板是
ffmpeg -i input -vf tpad=start_duration=5 -af adelay=5000|5000 stream-out
tpad
过滤器会在视频流的开头添加 5 秒的黑色,apad 过滤器会在音频的前两个通道添加 5000 毫秒的静音。
如何使用 FFMPEG 为从 (v4l2) 网络摄像头发送到媒体服务器的流添加延迟?
这里的用例类似于安全摄像头,我希望能够在视频中检测到某些内容时将视频流式传输到服务器。确保在视频中捕捉到感兴趣的事件的最简单方法是使用 FFMPEG 从摄像机流式传输到虚拟环回设备,并增加延迟。当感兴趣的事件发生时,该环回设备可用于启动直播。
在 GStreamer 中,我将使用 queue
元素的 min-threshold-time
参数来完成此类延迟。例如,以下(大大简化的)示例管道在显示来自 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
选项,但据我所知,它仅适用于已录制的文件,目前尚不清楚什么是好的替代方案。
使用最近 git 构建的 ffmpeg,基本模板是
ffmpeg -i input -vf tpad=start_duration=5 -af adelay=5000|5000 stream-out
tpad
过滤器会在视频流的开头添加 5 秒的黑色,apad 过滤器会在音频的前两个通道添加 5000 毫秒的静音。