Hardware video acceleration (Русский) - ArchWiki

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи 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:

- 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 при её отсутствии в драйвере:

- libva-vdpau-driver – бекенд VDPAU для VA-API.
- libva-vdpau-driver-chromiumAUR[ссылка недействительна: package not found] – бекенд VDPAU для VA-API с патчем, позволяющим взаимодействовать с Chromium.
- libva-vdpau-driver-vp9-gitAUR – экспериментальная поддержка VP9.

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

- libvdpau-va-gl – бекенд VA-API для VDPAU, поддерживается только H.264 (англ.).

## Проверка

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

Совет: 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:
  - Укажите `i965`, если используется libva-intel-driver.
  - Укажите `iHD`, если используется intel-media-driver.
- 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 для получения более подробной информации.

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

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

- FFmpeg#Hardware video acceleration (англ.)
- GStreamer#Hardware video acceleration (англ.)

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

- Browser plugins#Adobe Flash Player (англ.)
- Kodi#Hardware video acceleration (англ.)
- MPlayer#Hardware video acceleration (англ.)
- mpv#Hardware video acceleration (англ.)
- VLC media player#Hardware video acceleration (англ.)

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

- Chromium#Hardware video acceleration (англ.)
- Firefox (Русский)#Аппаратное ускорение видео
- GNOME/Web#Video (англ.)

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

### Ошибка "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[ссылка недействительна: package not found].
- 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[ссылка недействительна: package not found]. Wayland не поддерживается, а Xwayland не работает корректно (англ.) с libva-intel-driver.
- 6 Начиная с Firefox 75 (firefox-nightlyAUR). В Firefox 75 поддерживаются только технологии H.264 и Wayland, а поддержка отличных от H.264 стандартов реализована в Firefox 76 и выше. Поддержка X11 на данный момент отсутствует. [11][12][13]

Categories:

- Graphics (Русский)
- X server (Русский)

Hidden category:

- Pages with broken package links