# Hardware video acceleration (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- VDPAU
- XvMC

本文或本节需要翻译。要贡献翻译，请访问简体中文翻译团队。

附注： 配置章节大部分内容未翻译（在 Talk:Hardware video acceleration (简体中文)# 中讨论）
翻译状态：本文是 VA-API 的翻译。上次翻译日期：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。

对于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 做了适配
- XvBA 作后端的 VA-API 由 AMD Catalyst 专有驱动提供支持。

如果设备驱动不支持 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闭源驱动中提取出的必要的固件文件。

闭源驱动:

- AMD: 位于AUR的libva-xvba-driverAUR[断开的链接：package not found]软件包为 Radeon HD 4000 系列或更新的GPU提供支持。在 Radeon HD 5000 系列或者更新的GPU上请使用 catalyst-utilsAUR[断开的链接：package not found] 驱动；在 Radeon HD 4000 系列上使用 catalyst-total-hd234kAUR[断开的链接：package not found] 作为驱动程序。

- 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闭源驱动中提取出的必要的固件 。

闭源驱动:

- AMD: 位于官方软件仓库的libvdpau-va-gl、位于AUR的libva-xvba-driverAUR[断开的链接：package not found]软件包两者为 Radeon HD 4000 系列或更新的GPU提供支持。在 Radeon HD 5000 系列或者更新的GPU上请使用 catalyst-utilsAUR[断开的链接：package not found] 驱动；在 Radeon HD 4000 系列上 使用 catalyst-total-hd234kAUR[断开的链接：package not found] 作为驱动程序。

- 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 | —2 | GeForce 8 and newer | —2 | GeForce 8 and newer
MPEG4 decoding | Radeon HD 6000 and newer | —2 | GeForce 200 and newer | —2 | 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 | — | —2 | — | —2 | GeForce 9004 and newer
VC1 decoding | Radeon HD 4000 and newer | —2 | GeForce 83 and newer | —2 | 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 或 AMD Catalyst 使用 `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 || bomiAUR[断开的链接：package not found] 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:Translateme (简体中文)
- Pages with broken package links
- Pages with dead links