Chromium 在 Linux 下 Intel 显卡视频硬件加速问题
posts/chromium%E5%9C%A8linux%E4%B8%8B%E7%9A%84%E8%A7%86%E9%A2%91%E7%A1%AC%E4%BB%B6%E5%8A%A0%E9%80%9F%E9%97%AE%E9%A2%98众所周知 Chromium 在 Linux 环境下即使打开了硬件加速播放视频的时候仍然会使用软解,对于一些高分辨率的播放场景使用 CPU 进行软件会比较吃力且消耗大量计算资源。截止目前的 Chromium 107 仍未解决这个问题。但通过一些额外的启动参数仍可以开启硬件加速,下面我们将讨论这个问题。
TLDR
截止目前(2024 年 4 月 26 日)Chromium 内核 v124 版本对于 Intel 显卡在 Wayland 上的视频硬件加速已经完全支持了。
测试环境为 KDE6 Wayland,目标浏览器为 Chrome 和 Vivaldi。
支持视频硬件加速启动的参数为--enable-features=VaapiVideoDecodeLinuxGL --use-gl=angle --use-angle=gl
。
只需要修改对应目标浏览器 flag 文件如下:
--enable-features=VaapiVideoDecodeLinuxGL
--use-gl=angle
--use-angle=gl
下面是启用 Wayland 的版本:
--enable-wayland-ime
--ozone-platform=wayland
--enable-features=VaapiVideoDecodeLinuxGL,UseOzonePlatform
--use-gl=angle
--use-angle=gl
下面为过时信息
测试环境
- Linux Distribution: Arch Linux
- GPU: Mesa Intel® UHD Graphics 620
- Window System: X Server / Wayland
- Browser: Chrome Version 107.0.5304.110 (Official Build) (64-bit)
- Desktop: GNOME 43.1
确保你的硬件加速已开启
按照 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 播放器在终端上播放视频观察终端输出也可以。
添加额外的启动参数开启 Chrome 的视频硬件加速
X Server
开启方式比较简单,只需要在$HOME/.config/chromium-flags.conf
下添加:
--use-gl=desktop
--disable-features=UseChromeOSDirectVideoDecoder
不出意外的话,播放视频的时候使用开发者设置的 Media 就能查看开启硬件加速了。
Wayland
与 X Server 方式类似,只需要在$HOME/.config/chromium-flags.conf
下添加:
--use-gl=egl
--disable-features=UseChromeOSDirectVideoDecoder
Mesa 不支持 ANGLE sync 导致的问题
由于在 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 对硬件解码的支持可参考:
- Intel GPU Decoder Device Information
- AMD GPU Decoder Device Information
- NVIDIA GPU Decoder Device Information
参考链接
- Hardware video acceleration - Chromium - ArchWiki
- Chromium - ArchWiki
- FS#67035 : [mesa] Fix Chromium choppiness on XWayland with EGL backend
- 1236697 - Enable VaapiVideoDecoder on linux - chromium
- egl/x11: implement ANGLE_sync_control_rate (!17815) · Merge requests · Mesa / mesa · GitLab
- Video decoding hardware acceleration on intel | Vivaldi Forum