所谓的视频硬件解码,或者叫视频硬件加速,就是用显卡来进行视频的解码和编码;相对的就是软件解码,把这部分工作交给cpu来做。用显卡的好处就是降低cpu的负载,并且能省电,因为显卡做这部分工作比cpu效率要高很多。

在看youtube 4k视频的时候,注意到一件事情就是电源的风扇在开始的时候会狂吹一阵子,非常的吵。然后cpu的负载会上升,就翻了一下arch wiki,配置了可能大家都已经很熟悉的硬件解码。

linux下面有两个开源的硬件加速api:VA-APIVDPAU

VA-API

VA-API (Video Acceleration API) 是一套 Intel 提供的视频硬件编解码的开源库和标准。各个显卡都有对应的开源驱动,AMD的是libva-mesa-driver。首先安装libva-utils这个包,里面的vainfo命令可以来检查VA-API的设置:

$ vainfo
vainfo: VA-API version: 1.11 (libva 2.11.1)
vainfo: Driver version: Mesa Gallium driver 21.1.2 for AMD Radeon RX 5700 XT (NAVI10, DRM 3.40.0, 5.12.9-arch1-1, LLVM 12.0.0)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc

VAEntrypointVLD 指的是你的显卡能够解码这个格式,VAEntrypointEncSlice 指的是你的显卡可以编码这个格式。

VDPAU

VDPAU 是一套 Nvidia 提供的把部分视频解码和后期处理工作转移到显卡的开源库和API。 我暂时没配置这个。。

FIREFOX

火狐浏览器已经支持在wayland下面使用VA-API的硬件加速,但是要配置一下。

  • 启用WebRender compositor about:config设置gfx.webrender.alltrue,重启浏览器。 about:support下面的Graphics子项目Descision Log找到WEBRENDER,看是否为available by user: Force enabled by pref,如果是的话就是成功。

  • 启动vaapi支持
    about:config下面: media.ffmpeg.vaapi.enabledtrue media.ffvpx.enabledfalse media.rdd-vpx.enabledfalse media.rdd-process.enabledfalse media.navigator.mediadatadecoder_vpx_enabledtrue

  • 开启firefox的wayland支持: 把下面的参数添加到环境变量,MOZ_ENABLE_WAYLAND=1写到~/.config/environment.d/firefox.conf,这个目录是systemd读取的用户环境变量目录。

确认使用VA-API

在火狐启动的时候添加环境变量MOZ_LOG="PlatformDecoderModule:5",查看日志里面的VA-API的字符串,看有没有开启就可以了。