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.
Состояние перевода: На этой странице представлен перевод статьи Hardware video acceleration. Дата последней синхронизации: 31 марта 2020. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Аппаратное ускорение видео (англ.) позволяет выполнять операции кодирования и декодирования видео на стороне видеокарты, разгружая CPU и экономя энергию.

Существуют несколько реализаций этой технологии на Linux:

  • Video Acceleration API (VA-API) — разработанная Intel спецификация и свободная библиотека, предоставляющая аппаратное ускорение кодирования и декодирования видео.
  • Video Decode and Presentation API for Unix (VDPAU) — разработанная NVIDIA свободная библиотека и API для переноса части процесса декодирования видео и его постобработки на сторону GPU.
  • NVDECODE/NVENCODE — проприетарные API аппаратного ускорения, используемые в таких поколениях GPU от NVIDIA, как Fermi, Kepler, Maxwell и Pascal.

Для получения информации о видеокартах, выпущенных до 2007 года, см. XvMC. Также всесторонний обзор поддержки данных технологий со стороны драйверов и приложений доступен в разделе #Сравнительные таблицы.

Установка

Intel

Свободные драйверы Intel graphics поддерживают VA-API:

NVIDIA

Свободный драйвер Nouveau поддерживает как VA-API, так и VDPAU:

  • GeForce 8 series и новее (до GeForce GTX 750) поддерживаются libva-mesa-driver и mesa-vdpau.
  • Необходим nouveau-fwAUR — пакет с микропрограммой, которая на сегодняшний день извлекается из бинарного драйвера NVIDIA.

Проприетарный драйвер NVIDIA поддерживает следующие технологии с помощью пакета nvidia-utils:

  • VDPAU на серии GeForce 8 и новее;
  • NVDECODE на Fermi и новее [1];
  • NVENCODE на Kepler и новее.

ATI/AMD

Свободные драйверы ATI и AMDGPU поддерживают как VA-API, так и VDPAU:

  • VA-API на Radeon HD 2000 и новее поддерживается libva-mesa-driver.
  • VDPAU на Radeon R300 и новее поддерживается mesa-vdpau.

Проприетарный драйвер AMDGPU PRO основывается на драйвере AMDGPU и поддерживает как VA-API, так и VDPAU.

Слои преобразований

Активация поддержки VA-API при её отсутствии в драйвере:

Активация поддержки VDPAU при её отсутствии в драйвере:

Проверка

Аппаратное ускорение, скорее всего, хорошо заработает по умолчанию. Проверить это можно описанными ниже способами.

Совет: mpv отлично подходит для проверки аппаратного ускорения на практике.

Проверка VA-API

Проверьте настройки VA-API, выполнив vainfo (предоставляется пакетом libva-utils):

$ 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

Необходимо задать корректный драйвер, см. #Настройка VA-API.

Проверка VDPAU

Установите пакет vdpauinfo, чтобы получить полный отчёт о конфигурации драйвера VDPAU и убедиться, что он загружен корректно:

$ 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/VDPAU вручную. Перед тем как продолжать чтение данного раздела, просмотрите раздел #Проверка.

Названия драйверов по умолчанию угадываются системой, если остутствуют какие-либо другие настройки. Однако они часто не совпадают и не работают. Предполагаемые значения можно просмотреть, выполнив следующую команду:

$ grep -iE 'vdpau | dri driver' /var/log/Xorg.0.log
(II) RADEON(0): [DRI2] DRI driver: radeonsi
(II) RADEON(0): [DRI2] VDPAU driver: radeonsi

В данном случае по умолчанию используется radeonsi для VA-API и VDPAU.

Примечание: Если используется GDM, выполните вместо этого следующую команду: journalctl -b | grep -iE 'vdpau | dri driver'.

Настройка VA-API

Драйвер VA-API можно переопределить с помощью переменной окружения LIBVA_DRIVER_NAME:

  • Intel graphics:
  • NVIDIA:
    • Укажите nouveau, если используется Nouveau.
    • Укажите vdpau, если используется NVIDIA.
  • ATI/AMD:
    • Укажите radeonsi, если используется AMDGPU.
Примечание:
  • Установленные драйверы находятся в /usr/lib/dri/ и используются как /usr/lib/dri/${LIBVA_DRIVER_NAME}_drv_video.so.
  • Некоторые драйверы устанавливаются несколько раз под разными именами в целях совместимости. Их список можно увидеть, выполнив команду sha1sum /usr/lib/dri/* | sort.
  • LIBVA_DRIVERS_PATH может использоваться для переопределения расположения драйверов VA-API.
  • Начиная с версии 12.0.1, libva-mesa-driver предоставляет radeonsi вместо gallium.

Настройка VDPAU

Драйвер VDPAU можно переопределить с помощью переменной окружения VDPAU_DRIVER.

Корректное название драйвера зависит от конфигурации:

  • Если используется Intel Graphics или AMD Catalyst, необходимо задать va_gl.
  • Если используется свободный драйвер AMD/ATI, задайте соответствующую версию драйвера, в зависимости от видеокарты. См. #Проверка.
  • Если используется свободный драйвер Nouveau, задайте nouveau.
  • Если используется проприетарный драйвер NVIDIA, задайте nvidia.
Примечание:
  • Установленные драйверы находятся в /usr/lib/vdpau/ и используются как /usr/lib/vdpau/libvdpau_${VDPAU_DRIVER}.so.
  • Некоторые драйверы устанавливаются несколько раз под разными именами в целях совместимости. Их список можно увидеть, выполнив команду sha1sum /usr/lib/vdpau/*.
  • В случае с конфигурацией с гибридной графикой (как с NVIDIA, так и с AMD), может потребоваться задать переменную окружения DRI_PRIME=1. См. статью PRIME для получения более подробной информации.

Настройка приложений

Мультимедийные фреймворки:

Видеоплееры:

Веб-браузеры:

Решение проблем

Ошибка "Failed to open VDPAU backend"

Необходимо задать переменную VDPAU_DRIVER, указывающую на корректный драйвер. См. #Настройка VDPAU.

Ошибка "init failed" с VAAPI

Данная ошибка (например, libva: /usr/lib/dri/i965_drv_video.so init failed) может происходить из-за неправильного определения Wayland. Одно из решений — сбросить переменную $DISPLAY, таким образом, mpv, MPlayer, VLC и т.д. не будут исходить из того, что используется X11. Также можно добавить аргумент --gpu-context=wayland, если используется mpv.

Сравнительные таблицы

Драйверы VA-API

Кодек libva-intel-driver [2] intel-media-driver [3] libva-mesa-driver [4] [5] libva-vdpau-driver
(адаптер VDPAU)
Декодирование
MPEG-2 GMA 4500 и новее Broadwell и новее Radeon HD 6000 и новее
GeForce 8 и новее1
См. #Драйверы VDPAU
MPEG-44 Нет Нет Radeon HD 6000 и новее
VC-1 Sandy Bridge и новее Broadwell и новее Radeon HD 2000 и новее
GeForce 9300 и новее1
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 и новее
VP8 Broadwell и новее Broadwell и новее Нет Нет
VP9 8bit Broxton и новее
Гибридное: Broadwell to Skylake3
Broxton/Apollo Lake и новее Raven Ridge и новее См. #Драйверы VDPAU5
VP9 10bit Kaby Lake и новее Kaby Lake и новее Нет
Кодирование
MPEG-2 Ivy Bridge и новее Broadwell и новее
кроме Broxton/Apollo Lake
Нет
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 и новее
Гибридное: от Haswell до Skylake3
Нет
VP9 8bit Kaby Lake и новее Icelake и новее
VP9 10bit Нет
  • 1 До GeForce GTX 750.
  • 2 Поддерживается libva-intel-driver-g45-h264AUR.
  • 3 Гибридный кодировщик VP8 и декодировщик VP9 поддерживается intel-hybrid-codec-driverAUR.
  • 4 MPEG-4 отключён по умолчанию из-за ограничений VAAPI. Задайте переменную окружения VAAPI_MPEG4_ENABLED=true, если вы всё-таки хотите протестировать данную функцию.
  • 5 Экспериментальная поддержка VP9 доступна в libva-vdpau-driver-vp9-gitAUR.

Драйверы VDPAU

Кодек mesa-vdpau [6] [7] nvidia-utils libvdpau-va-gl
(адаптер VA-API)
Декодирование
MPEG-2 Radeon R300 и новее
GeForce 8 и новее1
GeForce 8 и новее Нет
MPEG-4 Radeon HD 6000 и новее
GeForce 200 и новее1
GeForce 200 и новее
VC-1 Radeon HD 2000 и новее
GeForce 9300 и новее1
GeForce 8 и новее2
H.264/MPEG-4 AVC Radeon HD 2000 и новее
GeForce 8 и новее1
GeForce 8 и новее См. #Драйверы VA-API
H.265/HEVC 8bit Radeon R9 Fury и новее GeForce 900 и новее3 Нет
H.265/HEVC 10bit Radeon 400 и новее Нет4
VP9 8bit Нет GeForce 900 и новее3
VP9 10bit Нет Нет4
  • 1 До GeForce GTX 750.
  • 2 Кроме GeForce 8800 Ultra, 8800 GTX, 8800 GTS (320/640 MB).
  • 3 Кроме GeForce GTX 970 и GTX 980.
  • 4 Реализация NVIDIA ограничена 8-битными потоками [8] [9].

Драйвер NVIDIA

Кодек nvidia-utils [10]
NVDECODE NVENCODE
MPEG-2 Fermi и новее1 Нет
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) и новее Нет
VP9 8bit Maxwell (GM206) и новее
VP9 10bit Pascal и новее
  • 1 Кроме GM108 (не поддерживается)
  • 2 Кроме GM108 и GP108 (не поддерживаются)

Поддержка приложениями

Приложение Декодирование Кодирование Документация
VA-API VDPAU NVDECODE VA-API NVENCODE
FFmpeg Да Да Да Да Да FFmpeg#Hardware video acceleration (англ.)
GStreamer Да1 Да Да2 Да1 Да2 GStreamer#Hardware video acceleration (англ.)
Kodi Да Да Да Kodi#Hardware video acceleration (англ.)
mpv Да Да Да Mpv (Русский)#Аппаратное декодирование
VLC media player Да Да Нет VLC media player#Hardware video acceleration (англ.)
MPlayer Да3 Да Нет MPlayer#Hardware video acceleration (англ.)
Flash Нет4 Да4 Нет Browser plugins#Adobe Flash Player (англ.)
Chromium Да5 Нет Нет ? Нет Chromium#Hardware video acceleration (англ.)
Firefox Да6 Нет Нет Нет Нет Firefox (Русский)#Аппаратное ускорение видео
GNOME/Web Да1 Да Да2 ? ? GNOME/Web#Video (англ.)
  • 1 GStreamer использует белый список (англ.) драйверов VA-API. Чтобы использовать другие драйверы (например, intel-media-driver), задайте переменную окружения GST_VAAPI_ALL_DRIVERS=1.
  • 2 NVDECODE/NVENCODE отключён в пакете Arch.
  • 3 Поддержка VA-API доступна в mplayer-vaapiAUR.
  • 4 VDPAU поддерживается только NPAPI-плагином. Доступен экспериментальный адаптер в виде PPAPI-плагина для NPAPI-браузеров, который частично поддерживает ускорение VA-API и VDPAU.
  • 5 Поддержка VA-API доступна в chromium-vaapiAUR. Wayland не поддерживается, а XWayland не работает корректно (англ.) с libva-intel-driver.
  • 6 Начиная с Firefox 75 (firefox-nightlyAUR). В Firefox 75 поддерживаются только технологии H.264 и Wayland, а поддержка отличных от H.264 стандартов реализована в Firefox 76 и выше. Поддержка X11 на данный момент отсутствует. [11][12][13]