Hardware video acceleration (简体中文)

From ArchWiki

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驱动

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

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 drivers
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 页面。

支持的软件

开启软件的硬件加速

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