使用 ffmpeg 通过 UDP 传输视频流 - h264 低延迟

使用 ffmpeg 通过 UDP 传输视频流 - h264 低延迟

各位视频编解码器爱好者们,大家好,

我目前正在开发一个小型系统,使用办公室的电脑在客厅玩游戏。我正尝试使用 ffmpeg 通过 UDP 以尽可能低的延迟传输屏幕。现在我的命令如下:

服务器端

ffmpeg -s 1920x1080 -f x11grab  -i :0.0+0,0  -preset ultrafast -tune zero_latency -f mpegts udp://{CLIENT_IP}:8000

客户端

ffplay -fflags nobuffer -flags low_delay -probesize 20000 -analyzeduration 1 -strict experimental -framedrop -f mpegts udp://{SERVER_IP}:8000

虽然我的接收端视频质量很好(实际上我想使用不同的复用器因为 mpegts 有点丑),但现在我遇到了整整一秒的延迟。

奇怪的是,如果我在服务器端降低比特率,延迟保持不变。

您知道有什么方法可以减少它吗?

答案1

对于mpegts具有最小延迟的流式传输,还有一个“秘密参数”:

`-omit_video_pes_length 0`

默认值为-omit_video_pes_length 1,省略长度会增加一帧的延迟。


服务器端:
ffmpeg -s 1920x1080 -f x11grab -i :0.0+0,0 -preset ultrafast -tune zero_latency -f mpegts -omit_video_pes_length 1 udp://{CLIENT_IP}:8000


为了使 FFplay 获得最小的延迟,请使用-flags low_delay-probesize 32-vf setpts=0按照说明进行操作这里

客户端:
ffplay -fflags nobuffer -flags low_delay -probesize 32 -analyzeduration 1 -strict experimental -framedrop -f mpegts -vf setpts=0 udp://{SERVER_IP}:8000


仅当通信带宽接近满容量时,降低比特率才会影响延迟(低于某个比特率,影响可以忽略不计)。

相关内容