Hardware video acceleration (简体中文)

From ArchWiki
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.

Tango-preferences-desktop-locale.png本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队Tango-preferences-desktop-locale.png

附注: 配置章节大部分内容未翻译(在 Talk:Hardware video acceleration (简体中文)# 中讨论)
翻译状态:本文是 VA-API翻译。上次翻译日期:2014-01-27。如果英文版本有所更改,则您可以帮助同步翻译。

硬件视频加速 让显卡进行视频的解码和编码,以减少CPU的负载并节省电力。

Linux 中有多种方式可以实现视频加速:

对于2007年以前的显卡,参见XvMC。大致的总览对比和应用支持,参见#支持的格式#支持的软件

安装

Intel

Intel graphics 开源驱动支持 VA-API:

NVIDIA

Nouveau 开源驱动支持 VA-API 和 VDPAU:

NVIDIA 专有驱动通过 nvidia-utils 支持以下:

  • GeForce 8 系列和更新的 GPU 的 VDPAU;
  • Fermi 和更新的 GPU 的 NVDECODE [1];
  • Kepler 和更新的 GPU 的 NVENCODE

ATI/AMD

ATIAMDGPU 开源驱动支持 VA-API 和 VDPAU:

AMDGPU PRO 专有驱动是基于 AMDGPU 驱动的,所以支持 VA-API 和 VDPAU。

翻译层

如果设备驱动不支持 VA-API,可以通过以下方式来曲线救国:

如果设备驱动不支持 VDPAU,可以这样曲线救国:

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

开源驱动:

闭源驱动:

VDPAU

开源驱动:

闭源驱动:

支持的格式

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

要检查一个功能是否被 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 页面。

支持的软件

开启软件的硬件加速

|| flashpluginAUR
|| 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
|| 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