Hardware video acceleration (简体中文)
硬件视频加速 让显卡进行视频的解码和编码,以减少CPU的负载并节省电力。
Linux 中有多种方式可以实现视频加速:
- 视频加速API (Video Acceleration API, 缩写为VA-API) 是一套 Intel 提供的视频硬件编解码的开源库和标准。
- Unix视频解码及演示 API (Video Decode and Presentation API for Unix,缩写为VDPAU) (VDPAU) 是一套 Nvidia 提供的把部分视频解码和后期处理工作转移到显卡的开源库和 API。
- NVDECODE/NVENCODE NVIDIA 的 费米、开普勒、Maxwell 和 Pascal 系列显卡所使用的专有 API。
对于2007年以前的显卡,参见XvMC。大致的总览对比和应用支持,参见#支持的格式和#支持的软件。
安装
Intel
Intel graphics 开源驱动支持 VA-API:
- HD Graphics 系列自从 Broadwell (~2015) 开始由 intel-media-driver 提供支持
- GMA 4500 系列 和更新的 GPU 直到 Coffee Lake 由 libva-intel-driver 提供支持
- GMA 4500 H.264 解码由 libva-intel-driver-g45-h264AUR 提供支持, 参见 Intel#Hardware accelerated H.264 decoding on GMA 4500.
- Broadwell 到 Skylake 的 VP9 解码和 Haswell 到 Skylake 的混合 VP8 编码由 intel-hybrid-codec-driverAUR提供支持。 VP9 decoding on Haswell crashes.
NVIDIA
Nouveau 开源驱动支持 VA-API 和 VDPAU:
- GeForce 8 系列和更新的 GPU 直到 GeForce GTX 750 由 libva-mesa-driver 和 mesa-vdpau 提供支持
- Requires nouveau-fwAUR 固件包(直接从NVIDIA二进制驱动解压出来的)
NVIDIA 专有驱动通过 nvidia-utils 支持以下:
- GeForce 8 系列和更新的 GPU 的 VDPAU;
- Fermi 和更新的 GPU 的 NVDECODE [1];
- Kepler 和更新的 GPU 的 NVENCODE
ATI/AMD
ATI 和 AMDGPU 开源驱动支持 VA-API 和 VDPAU:
- Radeon HD 2000 和更新的 GPU 的 VA-API 由 libva-mesa-driver 支持
- Radeon R300 和更新的 GPU 的 VDPAU 由 mesa-vdpau 支持
AMDGPU PRO 专有驱动是基于 AMDGPU 驱动的,所以支持 VA-API 和 VDPAU。
翻译层
如果设备驱动不支持 VA-API,可以通过以下方式来曲线救国:
- libva-vdpau-driver – VDPAU 作后端的 VA-API.
- libva-vdpau-driver-chromiumAUR – VDPAU 作后端的 VA-API,为 Chromium 做了适配
如果设备驱动不支持 VDPAU,可以这样曲线救国:
- libvdpau-va-gl – VA-API 作后端的 VDPAU,仅提供 H.264 支持.
Verification
Your system may work perfectly out-of-the-box without needing any configuration. Therefore it is a good idea to start with this section to see that it is the case.
检验 VA-API
运行 libva-utils 包提供的 vainfo
来检查 VA-API 的设置:
$ vainfo
libva info: VA-API version 0.39.4 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_0_39 libva info: va_openDriver() returns 0 vainfo: VA-API version: 0.39 (libva 1.7.3) vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Simple : VAEntrypointEncSlice VAProfileMPEG2Main : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointEncSliceLP VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264High : VAEntrypointEncSliceLP VAProfileH264MultiviewHigh : VAEntrypointVLD VAProfileH264MultiviewHigh : VAEntrypointEncSlice VAProfileH264StereoHigh : VAEntrypointVLD VAProfileH264StereoHigh : VAEntrypointEncSlice VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc VAProfileJPEGBaseline : VAEntrypointVLD VAProfileJPEGBaseline : VAEntrypointEncPicture VAProfileVP8Version0_3 : VAEntrypointVLD VAProfileVP8Version0_3 : VAEntrypointEncSlice VAProfileHEVCMain : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointEncSlice
VAEntrypointVLD
指的是你的显卡能够解码这个格式,VAEntrypointEncSlice
指的是你的显卡可以编码这个格式。
上面的例子里,i965
驱动正在运行,所以你可以看见这一行:
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
如果运行 vainfo
的时候出现了下面的错误提示:
libva info: va_openDriver() returns -1 vaInitialize failed with error code -1 (unknown libva error),exit
你要重新配置正确的驱动,详见Hardware video acceleration#Configuring VA-API.
Verifying VDPAU
Install vdpauinfo to verify if the VDPAU driver is loaded correctly and retrieve a full report of the configuration:
$ vdpauinfo
display: :0 screen: 0 API version: 1 Information string: G3DVL VDPAU Driver Shared Library version 1.0 Video surface: name width height types
420 16384 16384 NV12 YV12 422 16384 16384 UYVY YUYV 444 16384 16384 Y8U8V8A8 V8U8Y8A8 Decoder capabilities: name level macbs width height
MPEG1 --- not supported --- MPEG2_SIMPLE 3 9216 2048 1152 MPEG2_MAIN 3 9216 2048 1152 H264_BASELINE 41 9216 2048 1152 H264_MAIN 41 9216 2048 1152 H264_HIGH 41 9216 2048 1152 VC1_SIMPLE 1 9216 2048 1152 VC1_MAIN 2 9216 2048 1152 VC1_ADVANCED 4 9216 2048 1152 ..
支持的硬件
VA-API
开源驱动:
- AMD: 位于官方软件仓库的libva-vdpau-driver和mesa两者为 Radeon 9500 或更新的GPU提供支持。
- Intel: 位于官方软件仓库的libva-intel-driver软件包为 GMA 4500 系列或者更新的GPU提供支持。
- NVIDIA: 位于官方软件仓库的libva-vdpau-driver和mesa两者为 GeForce 8 系列和更新的GPU提供支持。位于AUR的 nouveau-fwAUR 软件包包含从NVIDIA闭源驱动中提取出的必要的固件文件。
闭源驱动:
- NVIDIA: 位于官方软件仓库的libva-vdpau-driver软件包和 nvidia-utils 驱动为 GeForce 8 系列或更新的GPU提供支持。
VDPAU
开源驱动:
- AMD: 位于官方软件仓库的 mesa-vdpau 软件包为 Radeon 9500 或更新的GPU提供支持。
- Intel: 位于官方软件仓库的libvdpau-va-gl和libva-intel-driver这两个软件包为 GMA 4500 系列或者更新的GPU提供支持。
- NVIDIA: 位于官方软件仓库的 mesa-vdpau 软件包为 GeForce 8 系列和更新的GPU提供支持。位于AUR的 nouveau-fwAUR 软件包包含从NVIDIA闭源驱动中提取出的必要的固件 。
闭源驱动:
- NVIDIA: 位于官方软件仓库的nvidia-utils软件包为 GeForce 400 系列或更新的GPU提供支持。
- GeForce 8/9 和 GeForce 100-300 系列由 nvidia-340xx-utilsAUR 软件包支持。
支持的格式
VA-API
Open source | Proprietary | ||||
---|---|---|---|---|---|
AMD | Intel | Nvidia | AMD | Nvidia | |
MPEG2 解码 | AMD Radeon 9500 或更新 | Intel GMA 4500 或更新 | Nvidia GeForce 8 或更新 | AMD Radeon HD 4000 或更新 | Nvidia GeForce 8 或更新 |
MPEG4 解码 | AMD Radeon HD 6000 或更新 | -- | Nvidia GeForce 200 或更新 | AMD Radeon HD 6000 或更新 | Nvidia GeForce 200 或更新 |
H264 解码 | AMD Radeon HD 4000 或更新 | Intel GMA 45001, Ironlake Graphics 或更新 | Nvidia GeForce 8 或更新 | AMD Radeon HD 4000 或更新 | Nvidia GeForce 8 或更新 |
VC1 解码 | AMD Radeon HD 4000 或更新 | Intel Sandy Bridge Graphics 或更新 | Nvidia GeForce 8200, 8300, 8400, 9300, 200 或更新 | AMD Radeon HD 4000 或更新 | Nvidia GeForce 8 或更新 |
MPEG2 编码 | -- | Intel Ivy Bridge Graphics 或更新 | -- | -- | -- |
H264 编码 | -- | Intel Sandy Bridge Graphics 或更新 | -- | -- | -- |
1libva-intel-driver-g45-h264AUR 软件包为其提供支持。具体方法和注意事项参看: 在 GMA 4500 硬解 H.264。
运行下面的命令以查看你的GPU支持哪些功能。这个命令由 libva-utils 软件包提供:
$ vainfo
VAEntrypointVLD 表示你可以解码该格式,VAEntrypointEncSlice 表示你可以编码该格式。
VDPAU
开源 | 闭源 | ||||
---|---|---|---|---|---|
AMD | Intel | Nvidia | AMD | Nvidia | |
MPEG2 decoding | Radeon 9500 and newer |
|
GeForce 8 and newer |
|
GeForce 8 and newer |
MPEG4 decoding | Radeon HD 6000 and newer |
|
GeForce 200 and newer |
|
GeForce 200 and newer |
H.264 decoding | Radeon HD 4000 and newer | GMA 45001, Ironlake Graphics and newer | GeForce 8 and newer | Radeon HD 4000 and newer | GeForce 8 and newer |
HEVC (H.265) decoding |
|
|
|
|
GeForce 9004 and newer |
VC1 decoding | Radeon HD 4000 and newer |
|
GeForce 83 and newer |
|
GeForce 83 and newer |
- 1 Supported by the libva-intel-driver-g45-h264AUR package. See Intel graphics#Hardware accelerated H.264 decoding on GMA 4500 for instructions and caveats.
- 2 As of version 0.3, the VA GL driver does not support any other hardware decoder than H.264.
- 3 Except GeForce 8800 Ultra, 8800 GTX, 8800 GTS (320/640 MB).
- 4 Except GeForce GTX 970 and GTX 980.
要检查一个功能是否被 GPU 支持,可以使用 vdpauinfo 软件包提供的命令:
$ vdpauinfo
配置
环境变量 VDPAU_DRIVER
决定使用的驱动。可以全局设置 或 针对一个用户 设置 环境变量
正确的驱动程序名称取决于您的设置:
- Intel 使用
va_gl
. - 开源AMD/ATI驱动程序,您需要将它设置为适当的驱动程序版本取决于你的GPU。
- Nvidia的专有版本将变量设置为“nvidia”。
$ grep -i vdpau /var/log/Xorg.0.log
(II) RADEON(0): [DRI2] VDPAU driver: r300
然后设置 VDPAU 驱动:
VDPAU_DRIVER=r300
多显卡显示
对混合显卡(NVIDIA和AMD),需要设置下面环境变量。
$ export DRI_PRIME=1
更多信息,参阅 PRIME wiki 页面。
支持的软件
开启软件的硬件加速
- Adobe Flash Player — 见 Browser plugins#Adobe Flash Player.
- || flashpluginAUR
- MPlayer 或 mplayer2[失效链接 2020-08-02 ⓘ] — 见MPlayer#Enabling VDPAU.
-
gnome-mplayer — 开启硬件加速: Edit > Preferences > Player, 设置 Video Output 为
vdpau
.
-
SMplayer — 开启硬件加速: Options > Preferences > General > Video, 设置 Output driver 为
vdpau
.
- || smplayer
- bomi — 硬件加速可以启用: Preferences > Video > Hardware acceleration.
- https://bomi-player.github.io || bomiAUR[损坏的链接:package not found] bomi-gitAUR
- || mpv
- || vlc
GStreamer
安装 gstreamer-vaapi 软件包,它存在于官方软件仓库。
$ gst-launch-1.0 playbin uri=file:///path/to/foobar.mpeg
如果发现了支持的格式,VA-API会自动被使用。
基于GStreamer的播放器:
- totem: 不需要配置。
MPlayer
安装 mplayer-vaapiAUR 软件包,它存在于官方软件仓库。
$ mplayer -vo vaapi -va vaapi foobar.mpeg
- -vo - 指定 vaapi 视频输出驱动
- -va - 指定 vaapi 视频解码驱动
基于 MPlayer 的播放器:
-
gnome-mplayer: 开启硬件加速的方法: 编辑 > 首选项 > 播放器, 并设置视频输出为
vaapi
。 -
smplayer: 开启硬件加速的方法: 选项 > 首选项 > 常规 > 视频, 并设置输出驱动为
vaapi
。
VLC media player
安装 vlc 软件包,它位于官方软件仓库。
开启硬件加速的方法: 工具 > 首选项 > 输入 / 编解码器, 然后设置 硬件加速解码 为 视频加速 (VA) API
。