Hardware video acceleration (Русский)
Состояние перевода: На этой странице представлен перевод статьи 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.
Также всесторонний обзор поддержки данных технологий со стороны драйверов и приложений доступен в разделе #Сравнительные таблицы.
Установка
Intel
Свободные драйверы Intel graphics поддерживают VA-API:
- Серия HD Graphics, начиная с Broadwell(~2015) и новее, поддерживается intel-media-driver .
- GMA 4500 series и более новые GPU до Coffee Lake поддерживаются libva-intel-driver .
- Декодирование H.264 на GMA 4500 поддерживается libva-intel-driver-g45-h264AUR , см. Intel graphics (Русский)#Декодирование H.264 на GMA 4500.
- Гибридное декодирование VP9 на процессорах от Broadwell до Skylake, а также гибридное декодирование VP8 на процессорах от Haswell до Skylake, поддерживается intel-hybrid-codec-driverAUR [ссылка недействительна: package not found] .
- Skylake и более новые поколения также требуют linux-firmware .
NVIDIA
Свободный драйвер Nouveau поддерживает как VA-API, так и VDPAU:
- GeForce 8 series и новее (до GeForce GTX 750) поддерживаются libva-mesa-driver и mesa-vdpau .
- Необходимnouveau-fwAUR — пакет с микропрограммой, которая на сегодняшний день извлекается из бинарного драйвера NVIDIA.
Проприетарный драйвер NVIDIA поддерживает следующие технологии с помощью пакета nvidia-utils :
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 при её отсутствии в драйвере:
- libva-vdpau-driver – бекенд VDPAU для VA-API.
- libva-vdpau-driver-chromiumAUR – бекенд VDPAU для VA-API с патчем, позволяющим взаимодействовать с Chromium.
- libva-vdpau-driver-vp9-gitAUR – экспериментальная поддержка VP9.
Активация поддержки VDPAU при её отсутствии в драйвере:
Проверка
Аппаратное ускорение, скорее всего, хорошо заработает по умолчанию. Проверить это можно описанными ниже способами.
Проверка VA-API
Проверьте настройки VA-API, выполнив vainfo (предоставляется пакетом libva-utils ):
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 и убедиться, что он загружен корректно:
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:
- Укажите i965 , если используется libva-intel-driver .
- Укажите iHD , если используется intel-media-driver .
- Укажите nouveau , если используется Nouveau.
- Укажите vdpau , если используется NVIDIA.
- Укажите radeonsi , если используется AMDGPU.
- Установленные драйверы находятся в /usr/lib/dri/ и используются как /usr/lib/dri/$ _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_$ .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.