我正在尝试使用 FFMpeg 和 FFserver 实现简单的相机流。我有两个略有不同的系统作为源,都是 Debian 操作系统:
- 第一个运行 ffmpeg 3.4.8,如图 1 所示
- 第二个运行 ffmpeg 2.8.17,如图 2 所示
用于将流发送到 ffserver 的 ffmpeg 命令如下,对于两个系统都是相同的:
ffmpeg -re -f v4l2 -s 640x360 -thread_queue_size 20 -probesize 32 -i /dev/video0 -threads 4 -fflags nobuffer -tune zerolatency http://myserverIP:myserverPort/liveFeed.ffm
为了查看流结果,我使用指向服务器 URL 的 openCV 从第三个系统访问实时流:
VideoCapture videoCap = new VideoCapture("http://myserverIP:myserverPort/liveFeed.flv");
...
videoCap.read(imageInput);
并开始从流中抓取传入的帧。
奇怪的事情发生在这里:
- 在第一个系统中,通过 openCV 可视化的视频流几乎是实时的,与原始源相比有 1-2 秒的延迟。
- 在第二个系统中,视频流受到可变延迟的影响,该延迟与流源的开始时间和使用 openCV 获取流的开始时间之间的经过时间相当(例如:如果我在 12:00:00 启动源流并等待 30 秒后再使用 openCV 访问该流,则在第三个系统上显示的延迟约为 30 秒)
ffserver 配置如下
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 6000
CustomLog -
#NoDaemon
<Feed liveFeed.ffm>
File /tmp/SCT-0001_3.ffm
FileMaxSize 5M
</Feed>
<Stream liveFeed.flv>
Format flv
Feed liveFeed.ffm
VideoCodec libx264
VideoFrameRate 20
VideoBitRate 200
VideoSize 640x360
AVOptionVideo preset superfast
AVOptionVideo tune zerolatency
AVOptionVideo flags +global_header
NoAudio
</Stream>
##################################################################
# Special streams
##################################################################
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
# Redirect index.html to the appropriate site
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
任何能帮助发现问题的帮助都非常好!谢谢