Ubuntu下ffplay窗口后台运行时如何避免直播流播放延迟
Ubuntu下ffplay窗口后台运行时如何避免直播流播放延迟
我之前也碰到过一模一样的问题,Ubuntu 22.04的GNOME窗口管理器确实会给后台窗口对应的进程降低CPU优先级,这对低延迟的直播流播放来说简直是噩梦。给你几个亲测有效的解决办法,按需尝试:
方法1:强制提升ffplay的进程优先级
直接在启动ffplay时就给它设置更高的优先级,绕开系统的自动调整:
sudo nice -n -10 ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \ -strict experimental -vf "setpts=N/30/TB" -an -noframedrop \ -i rtmp://localhost:1935/live
这里的-n -10是设置优先级值(范围是-20到19,数值越小优先级越高),用sudo是因为普通用户没法设置负数的nice值。如果ffplay已经在运行了,也可以临时调整它的优先级:
- 先找到ffplay的进程ID:
ps aux | grep ffplay - 用renice调整:
sudo renice -n -10 -p <你的ffplay进程ID>
方法2:用systemd-run托管ffplay进程
这个方式会让ffplay脱离窗口管理器的优先级控制,稳定性更强:
systemd-run --user --scope -p Nice=-10 ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \ -strict experimental -vf "setpts=N/30/TB" -an -noframedrop \ -i rtmp://localhost:1935/live
systemd的scope会保证进程的优先级不受窗口前后台状态的影响,很适合直播这种对稳定性要求高的场景。
方法3:给ffplay指定固定的CPU线程数
有时候后台延迟是因为ffplay没用到足够的CPU核心,强制指定线程数可以让它在后台也能抢到足够的资源:
在你的原命令里加上-threads <你的CPU核心数>,比如CPU是4核心就加-threads 4:
ffplay -f live_flv -fast -fflags nobuffer -flags low_delay \ -strict experimental -vf "setpts=N/30/TB" -an -noframedrop \ -threads 4 -i rtmp://localhost:1935/live
这个可以和方法1结合使用,效果更好。
方法4:在GNOME中设置后台进程例外
如果你用的是默认的GNOME桌面,可以通过GNOME Tweaks给ffplay开“后门”,让它后台时不被降优先级:
- 先安装GNOME Tweaks:
sudo apt install gnome-tweaks - 打开Tweaks,找到「Windows」或者「Performance」选项卡(不同版本位置可能略有不同)
- 找到「Background process priority」相关的设置,将
/usr/bin/ffplay添加到例外列表中
你可以先从方法1开始试,操作最简单见效最快;如果还是有问题,再试试systemd-run的方式,这个是最稳定的方案。
备注:内容来源于stack exchange,提问作者ravi
相关产品推荐
相关产品推荐

