Linux 服务器之间的视频流应用(FFmpeg)和 Windows 客户端(VLC 播放器),明显有约 10 秒的延迟。
FFmpeg 命令:
ffmpeg -re -f v4l2 -i /dev/video0 http://192.168.1.101:8090/feed1.ffm
VLC 播放器:
http://192.168.1.101:8090/test.swf
尽管服务器和客户端同时启动,但 VLC 播放器会延迟大约 10 秒来播放流,从服务器捕获的第一帧开始播放。因此,始终会有 10 秒的延迟。
我试图找出导致这种延迟的原因:
我的第一个想法是编解码器会延迟编码。在这种情况下,我应该在 ffserver 配置文件中包含什么编解码器?我尝试了许多视频编解码器(rawvideo、flv、mjpeg),但结果相同。
其次,我可以在 ffmpeg 命令中包含一个参数来控制延迟吗?
另一方面,这种延迟是否可能是由于 VLC 播放器造成的?
我理解这个问题有点笼统。但是,如果您遇到类似问题,我们将非常感激您的帮助。
FFserver配置文件:
Port 8090
BindAddress 0.0.0.0
MaxClients 10
MaxBandwidth 40000
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 500M
ACL allow localhost
ACL allow 127.0.0.1
ACL allow 192.168.0.0 192.168.255.255
</Feed>
<Stream test.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoSize 640x480
VideoFrameRate 30
VideoBitRate 400
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
PreRoll 5
StartSendOnKey
NoAudio
</Stream>
答案1
ffmpeg
添加使用 x265 编解码器的选项-tune zerolatency
和最佳选项,将 VideoSize 640x480 减少到 VideoSize 320x240。
最后,将播放器从 vlc 改为 ffplay