Ubuntu 16.04.3 Server下Qt Quick视频卡顿及gstreamer1.0-vaapi驱动缺失问题
解决Ubuntu 16.04.3 Server下Qt Quick(eglfs)视频卡顿及gstreamer1.0-vaapi驱动缺失问题
咱们一步步来拆解你遇到的问题:在Ubuntu 16.04.3 Server上用Qt Quick(eglfs后端全屏)跑图形应用时视频卡顿,怀疑硬件加速问题装了gstreamer1.0-vaapi,结果又碰到驱动找不到的情况。下面是针对性的排查和解决方法:
一、先确认硬件加速的基础环境
首先得搞清楚你的GPU是否支持VA-API,以及系统有没有正确识别显卡:
- 先运行
lspci | grep VGA查看显卡型号,VA-API对Intel核显支持最好,AMD部分型号也支持,NVIDIA则需要额外的vaapi驱动 - 对于Intel核显,Ubuntu 16.04默认的mesa驱动应该能支持,但得把依赖包装全:
sudo apt-get install mesa-utils va-driver-all vainfo - 运行
vainfo测试VA-API是否工作,不过因为是Server版没有X环境,得指定EGL设备:
(vainfo --display egl --device /dev/dri/renderD128renderD128是常见的GPU节点,你可以用ls /dev/dri/查看自己的设备名,可能是renderD129之类的)
如果这个命令能输出支持的VA-API profile列表,说明基础驱动没问题;要是报错,先解决驱动识别的问题再往下走。
二、修复gstreamer1.0-vaapi的驱动找不到问题
如果vainfo能正常输出,但gstreamer还是识别不了驱动,大概率是环境变量或插件配置的问题:
- 设置正确的环境变量:
因为你用的是eglfs后端,得告诉gstreamer用哪个EGL设备,启动应用前先设置:export GST_VAAPI_DISPLAY=egl:///dev/dri/renderD128 export LIBVA_DRIVER_NAME=i965 # Intel核显用这个,AMD的话换成radeonsi,NVIDIA需要装nvidia-vaapi-driver后用对应的名字 - 重新确认gstreamer vaapi插件状态:
运行gst-inspect-1.0 vaapi看看能不能列出vaapidecode、vaapisink这些元素,如果提示找不到插件,就重装一下:sudo apt-get purge gstreamer1.0-vaapi && sudo apt-get install gstreamer1.0-vaapi - 检查Qt多媒体的gstreamer支持:
确保你的Qt Quick应用用的是gstreamer后端的多媒体模块,Ubuntu 16.04的默认Qt包应该是支持的,你可以用qtchooser -run-tool=qmake -query QT_INSTALL_PLUGINS查看插件路径,确认里面有libgstreamer.so这类文件。
三、优化eglfs后端的播放性能
除了VA-API,eglfs的配置也会影响视频流畅度:
- 别开Qt的软件渲染:千万不要设
export QT_QUICK_BACKEND=software,要确保用硬件加速,正确的环境变量是export QT_QPA_EGLFS_INTEGRATION=eglfs_kms(如果你的系统用KMS/DRM的话) - 排查资源占用:用
top或htop看看有没有其他进程占了CPU/GPU资源,Server版可能跑了一些无关服务,先关掉试试 - 确认Qt编译选项:如果是你自己编译的Qt,要确保开启了
-opengl es2或-opengl desktop(根据GPU类型),并且启用了gstreamer支持。
四、验证修复效果
做完上面的步骤后,先测试gstreamer的vaapi是否正常工作,用这个命令:
gst-launch-1.0 filesrc location=/path/to/your/test-video.mp4 ! qtdemux ! vaapidecode ! vaapisink display=egl:///dev/dri/renderD128
如果这个测试能流畅播放视频,说明VA-API已经正常工作了,再重启你的Qt Quick应用,应该就能解决卡顿问题了。
内容的提问来源于stack exchange,提问作者Tomilov Anatoliy
相关产品推荐
相关产品推荐

