众所周知 Chromium 在 Linux 环境下即使打开了硬件加速播放视频的时候仍然会使用软解,对于一些高分辨率的播放场景使用 CPU 进行软件会比较吃力且消耗大量计算资源。截止目前的 Chromium 107 仍未解决这个问题。但通过一些额外的启动参数仍可以开启硬件加速,下面我们将讨论这个问题。
按照 Arch Linux Wiki 的 Hardware video acceleration 的介绍对于本次测试环境的 GPU 只需要安装intel-media-driver
包就足够了。对于一些其他型号的 GPU 按照 Wiki 操作即可。
安装过后可通过libva-utils
包提供的 vainfo
验证是 VA-API 是否能够正常调用。
调用成功输出如下:
Trying display: wayland
vainfo: VA-API version: 1.16 (libva 2.16.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.4.4 ()
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointFEI
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointFEI
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointFEI
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointFEI
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSlice
VAProfileVP9Profile0 : VAEntrypointVLD
当然也可使用 VLC 播放器结合intel_gpu_top
进行验证,如果Video
和VideoEnhance
有使用率,就证明开启了硬件加速。使用 MPV 播放器在终端上播放视频观察终端输出也可以。
开启方式比较简单,只需要在$HOME/.config/chromium-flags.conf
下添加:
--use-gl=desktop
--disable-features=UseChromeOSDirectVideoDecoder
不出意外的话,播放视频的时候使用开发者设置的 Media 就能查看开启硬件加速了。
与 X Server 方式类似,只需要在$HOME/.config/chromium-flags.conf
下添加:
--use-gl=egl
--disable-features=UseChromeOSDirectVideoDecoder
由于在 Native Wayland 下硬解无法工作,所以进行硬件解码的会使用 Xwayland。其中的--use-gl=egl
在部分系统上会出现 bug,在我这里表现为浏览器滚动和播放视频帧率明显下降的情况(尽管视频播放硬件加速已经打开了)。
后续希望 Mesa 能够支持 ANGLE sync 吧。
截止目前(2023 年 2 月 15 日) egl/x11: implement ANGLE_sync_control_rate 已经合并到了 Mesa 中,并且 ArchLinux 的 Mesa 已经更新到了其上游合并后的版本,现在可以在 Wayland 的下使用硬件加速进行视频硬解码了。
不同GPU对硬件解码的支持可参考: