所谓的视频硬件解码,或者叫视频硬件加速,就是用显卡来进行视频的解码和编码;相对的就是软件解码,把这部分工作交给cpu来做。用显卡的好处就是降低cpu的负载,并且能省电,因为显卡做这部分工作比cpu效率要高很多。
在看youtube 4k视频的时候,注意到一件事情就是电源的风扇在开始的时候会狂吹一阵子,非常的吵。然后cpu的负载会上升,就翻了一下arch wiki,配置了可能大家都已经很熟悉的硬件解码。
linux下面有两个开源的硬件加速api:VA-API
和VDPAU
。
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.all
为true
,重启浏览器。about:support
下面的Graphics
子项目Descision Log
找到WEBRENDER
,看是否为available by user: Force enabled by pref
,如果是的话就是成功。 -
启动vaapi支持
about:config
下面:media.ffmpeg.vaapi.enabled
为true
media.ffvpx.enabled
为false
media.rdd-vpx.enabled
为false
media.rdd-process.enabled
为false
media.navigator.mediadatadecoder_vpx_enabled
为true
-
开启firefox的wayland支持: 把下面的参数添加到环境变量,
MOZ_ENABLE_WAYLAND=1
写到~/.config/environment.d/firefox.conf
,这个目录是systemd读取的用户环境变量目录。
确认使用VA-API
在火狐启动的时候添加环境变量MOZ_LOG="PlatformDecoderModule:5"
,查看日志里面的VA-API
的字符串,看有没有开启就可以了。