如何减少 FFmpeg 视频流的延迟?

如何减少 FFmpeg 视频流的延迟?

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 秒的延迟。

我试图找出导致这种延迟的原因:

  1. 我的第一个想法是编解码器会延迟编码。在这种情况下,我应该在 ffserver 配置文件中包含什么编解码器?我尝试了许多视频编解码器(rawvideo、flv、mjpeg),但结果相同。

  2. 其次,我可以在 ffmpeg 命令中包含一个参数来控制延迟吗?

  3. 另一方面,这种延迟是否可能是由于 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

相关内容