Hardware video acceleration (简体中文) - ArchWiki

Jump to content

# Hardware video acceleration (简体中文)

From ArchWiki

相关文章

- 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 做了适配

如果设备驱动不支持 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

| 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 使用 `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 dead links
- Pages with broken package links