Hardware video acceleration (简体中文) - ArchWiki

Jump to content

这篇文章或章节的翻译不反映原文。

原因：Translation has been done recently on this page, but this is still out of sync with the English page, and the Translation Status should then be updated.（在 Talk:Hardware video acceleration (简体中文)# 中讨论）
翻译状态：本文是 Hardware video acceleration 的翻译。上次翻译日期：2014-01-27。如果英文版本有所更改，则您可以帮助同步翻译。

硬件视频加速 让显卡进行视频的解码和编码，以减少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。

大致的总览对比和应用支持，参见#支持的硬件和#支持的软件。

## 安装

### 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.

提示： mpv is great for testing hardware acceleration in practice.

### 检验 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驱动

Codec | libva-intel-driver [2] | intel-media-driver [3] | libva-mesa-driver [4] [5] | libva-vdpau-driver (VDPAU adapter) | libva-nvidia-driverAUR (NVDECODE adapter)
--- | --- | --- | --- | --- | ---
Decoding
MPEG-2 | GMA 4500 及更新 | Broadwell 及更新 | Radeon HD 6000 及更新 GeForce 8 及更新1 | See #VDPAU drivers | See #NVIDIA driver only
H.263/MPEG-4 Visual4 | No | No | Radeon HD 6000 及更新 | No6
VC-1 | Sandy Bridge 及更新 | Broadwell 及更新 | Radeon HD 2000 及更新 GeForce 9300 及更新1 | See #NVIDIA driver only
H.264/MPEG-4 AVC | GMA 45002, Ironlake 及更新 | Radeon HD 2000 及更新 GeForce 8 及更新1
H.265/HEVC 8bit | Cherryview/Braswell 及更新 | Skylake 及更新 | Radeon R9 Fury 及更新
H.265/HEVC 10bit | Broxton及更新 | Broxton/Apollo Lake 及更新 | Radeon 400 及更新 | No6
VP8 | Broadwell 及更新 | Broadwell 及更新 | No | No | See #NVIDIA driver only
VP9 8bit | Broxton and newer Hybrid: Haswell refresh to Skylake3 | Broxton/Apollo Lake 及更新 | Raven Ridge 及更新 | See #VDPAU drivers5
VP9 10bit | Kaby Lake 及更新 | Kaby Lake 及更新 | No | No6
AV1 8-bit & 10-bit | No | Tiger Lake 及更新 | Radeon RX 6000 及更新
Encoding
MPEG-2 | Ivy Bridge 及更新 | Broadwell 及更新 | No | – | No6
H.264/MPEG-4 AVC | Sandy Bridge 及更新 | Broadwell 及更新 | Radeon HD 7000 及更新
H.265/HEVC 8bit | Skylake 及更新 | Skylake 及更新 | Radeon 400 及更新
H.265/HEVC 10bit | Kaby Lake 及更新 | Kaby Lake 及更新 | Raven Ridge 及更新
VP8 | Cherryview/Braswell 及更新 Hybrid: Haswell to Skylake3 | No
VP9 8bit | Kaby Lake 及更新 | Icelake 及更新
VP9 10bit | No

- 1 直到 GeForce GTX 750.
- 2 支持提供自y libva-intel-driver-g45-h264AUR.
- 3 混合的VP8/9支持自 intel-hybrid-codec-driverAUR.
- 4 MPEG-4第二部分默认关闭由于VA-API的设置.设置environment variable `VAAPI_MPEG4_ENABLED=true`去使用其于所有地方.
- 5 实验性的VP9支持提供自libva-vdpau-driver-vp9-gitAUR.
- 6 NVIDIA CUDA 适配器/编解码器支持正积极的变化于 [6].

### VDPAU drivers

Codec | Color depth | mesa-vdpau [7] [8] | nvidia-utils | libvdpau-va-gl (VA-API adapter)
--- | --- | --- | --- | ---
Decoding
MPEG-2 | 8bit | Radeon R300 及更新 GeForce 8 及更新1 | GeForce 8 及更新 | No
H.263/MPEG-4 Visual | 8bit | Radeon HD 6000 及更新 GeForce 200 及更新1 | GeForce 200 及更新
VC-1 | 8bit | Radeon HD 2000 及更新 GeForce 9300 及更新1 | GeForce 8 及更新2
H.264/MPEG-4 AVC | 8bit | Radeon HD 2000 及更新 GeForce 8 及更新1 | GeForce 8 及更新 | See #VA-API驱动
H.265/HEVC | 8bit | Radeon R9 Fury 及更新 | GeForce 900 及更新3 | No
10bit | Radeon 400 及更新 | No4
VP9 | 8bit | No | GeForce 900 及更新3
10bit | No | No4
AV1 | 8bit | No | GeForce 30 及更新5
10bit | No | No4

- 1 直到GeForce GTX 750.
- 2 Except GeForce 8800 Ultra, 8800 GTX, 8800 GTS (320/640 MB).
- 3 除了GeForce GTX 970 and GTX 980.
- 4 NVIDIA 实现仅限于8bit流 [9] [10].
- 5 开始于驱动版本510.[11]

### NVIDIA driver only

Codec | nvidia-utils [12]
--- | ---
NVDECODE | NVENCODE
MPEG-2 | Fermi 及更新1 | No
VC-1
H.264/MPEG-4 AVC | Kepler 及更新2
H.265/HEVC 8bit | Maxwell (GM206) 及更新 | Maxwell (2nd Gen) 及更新
H.265/HEVC 10bit | Pascal 及更新
VP8 | Maxwell (2nd Gen) 及更新 | No
VP9 8bit | Maxwell (GM206) 及更新
VP9 10bit | Pascal 及更新
AV1 8bit & 10bit | Ampere 及更新3

- 1 除了 GM108 (not supported)
- 2 除了 GM108 and GP108 (not supported)
- 3 除了 A100 (not supported)

## 配置

环境变量 `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.

  || mplayer mplayer2AUR

- gnome-mplayer — 开启硬件加速: Edit > Preferences > Player, 设置 Video Output 为 `vdpau`.

  || gnome-mplayer

- SMplayer — 开启硬件加速: Options > Preferences > General > Video, 设置 Output driver 为 `vdpau`.

  || smplayer

- bomi — 硬件加速可以启用: Preferences > Video > Hardware acceleration.

  https://bomi-player.github.io || bomi-gitAUR

- Mpv — 见 Mpv#Hardware video acceleration.

  || mpv

- VLC media player — 见 VLC media player#Hardware video acceleration.

  || 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 视频解码驱动

注意： 你也可以配合VDPAU后端使用 mplayer2AUR 。详情参看 MPlayer (简体中文)#启用 VDPAU。

基于 MPlayer 的播放器:

- gnome-mplayer: 开启硬件加速的方法: 编辑 > 首选项 > 播放器, 并设置视频输出为 `vaapi`。
- smplayer: 开启硬件加速的方法: 选项 > 首选项 > 常规 > 视频, 并设置输出驱动为 `vaapi`。

### VLC media player

安装 vlc 软件包，它位于官方软件仓库。

开启硬件加速的方法: 工具 > 首选项 > 输入 / 编解码器, 然后设置 硬件加速解码 为 `视频加速 (VA) API`。

Categories:

- Graphics (简体中文)
- X server (简体中文)

Hidden categories:

- Pages or sections flagged with Template:Bad translation (简体中文)
- Pages with dead links