Linux Chrome 硬件解码配置与排查

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处
ChromeChromiumVAAPIGPU

这篇文章整理 Linux 桌面上排查 Chrome/Chromium 硬件解码的一条实际路径:先确认 VA-API 驱动,再用启动参数试验,最后从浏览器内部页面确认 GPU 进程和视频解码器。Chromium 的 VA-API 文档明确提醒,Linux VA-API 路径并非所有配置都受支持,参数和特性开关会随版本变化。

先验证 VA-API 驱动

Debian/Ubuntu 先安装工具和 Intel 媒体驱动:

sudo apt update
sudo apt install -y vainfo intel-media-va-driver
vainfo

vainfo 能否初始化并列出 profile,是浏览器排查的前置条件。若这里已经报 vaInitialize failed,先处理 libva 驱动、会话类型、设备权限或显卡驱动;直接增加 Chrome flag 通常不会修复系统级 VA-API。

先用默认配置确认现状

先不带历史试验参数启动 Chrome,打开 chrome://gpu,记录 Video Acceleration Information、GPU compositing 和 driver bug workaround。这样能区分浏览器本身的能力与启动参数造成的变化。

原记录中的历史启动参数

原脚本留下过这一组参数,可作为一次试验组合:

--ignore-gpu-blocklist
--enable-gpu-rasterization
--enable-zero-copy
--enable-features=VaapiVideoDecodeLinuxGL,VaapiVideoDecoder,VaapiVideoEncoder,VaapiIgnoreDriverChecks
--disable-features=UseChromeOSDirectVideoDecoder,UseSkiaRenderer

较保守的组合是:

--ignore-gpu-blocklist
--enable-gpu-rasterization
--enable-zero-copy
--enable-features=VaapiVideoDecodeLinuxGL

这些开关不是稳定 API。--ignore-gpu-blocklist 只绕过部分 GPU 黑名单,--enable-gpu-rasterization 影响页面光栅化,--enable-zero-copy 影响缓冲路径;它们都不能单独证明视频已经硬解。VaapiVideoDecodeLinuxGLVaapiVideoDecoderVaapiIgnoreDriverChecks 是否存在、是否默认启用,要以当前浏览器构建为准。Chromium 的 media switches 源码可用于核对名称;旧版本中的 UseSkiaRenderer 等开关可能已经移除或改变含义。这些参数保留作历史试验记录,不作为所有版本的默认推荐。

启动与验证

确认已保存浏览器中的工作并关闭原有进程后,旧记录的精简组合可以写成下面的启动命令;仅在所用版本仍支持该 feature 时测试:

google-chrome --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy \
  --enable-features=VaapiVideoDecodeLinuxGL

当前 Chromium 的 Linux OpenGL 示例已经使用 AcceleratedVideoDecodeLinuxGL。针对支持这一 feature 的构建,可以单独验证解码路径:

google-chrome --use-gl=angle --use-angle=gl \
  --enable-features=AcceleratedVideoDecodeLinuxGL

这是根据当前文档补充的测试入口,与前面的旧组合分开使用;不是把两套 flags 合并得越多越好。系统设置中也要启用可用的图形加速。实际可执行文件可能是 chromiumchromium-browser,先用 command -v 确认。

进入 chrome://version 查看最终命令行,再到 chrome://gpu 查看可加速的编解码格式及错误日志。播放视频时,打开 chrome://media-internals,找到对应播放器,核对当前构建显示的解码器属性。官方文档举例使用 video_decoder=GpuVideoDecoder;界面和命名随版本变化时,以该构建的字段说明为准。启动命令里出现某个 feature 名字,只能说明传入过参数,不能代替实际播放器的解码结果。

如果 chrome://gpu 显示 GPU compositing 正常但 media-internals 仍使用软件解码,说明页面渲染加速和视频解码是两个独立问题。此时检查 codec、VA profile、驱动日志和当前 feature flags,不要继续叠加无关参数。

--single-process 与 OAuth2

原脚本还出现过:

--single-process

它改变 Chrome 的进程模型,和 GPU 硬件加速不是一回事;不要把它作为加速参数加入日常启动命令。

OAuth2 参数只是原记录中的另一类启动配置,与 GPU 无关。公开示例只能写占位符:

--oauth2-client-id=<client-id>
--oauth2-client-secret=<client-secret>

真实 secret 不应写入 shell 历史、桌面快捷方式或文章。

版本漂移与回退

当升级 Chrome、Chromium、Mesa 或内核后行为改变,先删除全部试验参数,用干净配置重新查看 chrome://gpuchrome://media-internals,再一次只增加一个开关。Chromium 官方文档当前仍把 Linux VA-API 作为受平台和构建影响的路径;以当前构建的官方源码和内部页面结果为准。