Hardware video acceleration (Русский)
Аппаратное ускорение видео (англ.) позволяет выполнять операции кодирования и декодирования видео на стороне видеокарты, разгружая 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:
- Серия 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.
- 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.
- – бекенд VDPAU для VA-API с патчем, позволяющим взаимодействовать с Chromium.
- – экспериментальная поддержка VP9.
Активация поддержки VDPAU при её отсутствии в драйвере:
- – бекенд VA-API для VDPAU, поддерживается только H.264 (англ.).
Проверка
Аппаратное ускорение, скорее всего, хорошо заработает по умолчанию. Проверить это можно описанными ниже способами.
Проверка VA-API
Проверьте настройки VA-API, выполнив (предоставляется пакетом libva-utils):
означает, что видеокарта способна декодировать данный формат, а VAEntrypointEncSlice означает, что данный формат можно кодировать.
В данном примере используется драйвер :
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
Если при выполнении отображается следующая ошибка:
libva info: va_openDriver() returns -1 vaInitialize failed with error code -1 (unknown libva error),exit
Необходимо задать корректный драйвер, см. #Настройка VA-API.
Проверка VDPAU
Установите пакет , чтобы получить полный отчёт о конфигурации драйвера VDPAU и убедиться, что он загружен корректно:
Настройка
Несмотря на то, что видеодрайвер должен автоматически активировать поддержку аппаратного ускорения видео с помощью VA-API и VDPAU, в некоторых случаях может потребоваться настроить VA-API/VDPAU вручную. Перед тем как продолжать чтение данного раздела, просмотрите раздел #Проверка.
Названия драйверов по умолчанию угадываются системой, если остутствуют какие-либо другие настройки. Однако они часто не совпадают и не работают. Предполагаемые значения можно просмотреть, выполнив следующую команду:
В данном случае по умолчанию используется для VA-API и VDPAU.
journalctl -b | grep -iE 'vdpau | dri driver'.Настройка VA-API
Драйвер VA-API можно переопределить с помощью переменной окружения :
- Intel graphics:
- Укажите , если используется libva-intel-driver.
- Укажите , если используется intel-media-driver.
- NVIDIA:
- ATI/AMD:
- Укажите , если используется 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 можно переопределить с помощью переменной окружения .
Корректное название драйвера зависит от конфигурации:
- Если используется Intel Graphics или AMD Catalyst, необходимо задать .
- Если используется свободный драйвер AMD/ATI, задайте соответствующую версию драйвера, в зависимости от видеокарты. См. #Проверка.
- Если используется свободный драйвер Nouveau, задайте .
- Если используется проприетарный драйвер NVIDIA, задайте .
Настройка приложений
Мультимедийные фреймворки:
Видеоплееры:
- Browser plugins#Adobe Flash Player (англ.)
- Kodi#Hardware video acceleration (англ.)
- MPlayer#Hardware video acceleration (англ.)
- mpv#Hardware video acceleration (англ.)
- VLC media player#Hardware video acceleration (англ.)
Веб-браузеры:
Решение проблем
Ошибка "Failed to open VDPAU backend"
Необходимо задать переменную , указывающую на корректный драйвер. См. #Настройка VDPAU.
Ошибка "init failed" с VAAPI
Данная ошибка (например, libva: /usr/lib/dri/i965_drv_video.so init failed) может происходить из-за неправильного определения Wayland. Одно из решений — сбросить переменную , таким образом, mpv, MPlayer, VLC и т.д. не будут исходить из того, что используется X11. Также можно добавить аргумент , если используется mpv.
Сравнительные таблицы
Драйверы VA-API
| Кодек | (адаптер VDPAU) | |||
|---|---|---|---|---|
| Декодирование | ||||
| MPEG-2 | Broadwell и новее | См. #Драйверы VDPAU | ||
| MPEG-44 | ||||
| VC-1 | Broadwell и новее | |||
| H.264/MPEG-4 AVC | GMA 45002, Ironlake и новее | |||
| H.265/HEVC 8bit | ||||
| H.265/HEVC 10bit | Broxton/Apollo Lake и новее | |||
| VP8 | Broadwell и новее | Broadwell и новее | ||
| VP9 8bit | Broxton/Apollo Lake и новее | rowspan=2 | См. #Драйверы VDPAU5 | |
| VP9 10bit | ||||
| Кодирование | ||||
| MPEG-2 | Ivy Bridge и новее | rowspan=7 | ||
| H.264/MPEG-4 AVC | Broadwell и новее | |||
| H.265/HEVC 8bit | ||||
| H.265/HEVC 10bit | rowspan=2 | |||
| VP8 | rowspan=3 | |||
| VP9 8bit | rowspan=2 | |||
| VP9 10bit | ||||
- 1 До GeForce GTX 750.
- 2 Поддерживается .
- 3 Гибридный кодировщик VP8 и декодировщик VP9 поддерживается intel-hybrid-codec-driverAUR.
- 4 MPEG-4 отключён по умолчанию из-за ограничений VAAPI. Задайте переменную окружения , если вы всё-таки хотите протестировать данную функцию.
- 5 Экспериментальная поддержка VP9 доступна в .
Драйверы VDPAU
| Кодек | mesa-vdpau | (адаптер VA-API) | ||
|---|---|---|---|---|
| Декодирование | ||||
| MPEG-2 | rowspan=3 | |||
| MPEG-4 | Radeon HD 6000 и новее GeForce 200 и новее1 |
|||
| VC-1 | ||||
| H.264/MPEG-4 AVC | См. #Драйверы VA-API | |||
| H.265/HEVC 8bit | rowspan=4 | |||
| H.265/HEVC 10bit | 4 | |||
| VP9 8bit | ||||
| 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-битными потоками .
Драйвер NVIDIA
| Кодек | nvidia-utils | |
|---|---|---|
| NVDECODE | NVENCODE | |
| MPEG-2 | Fermi и новее1 | rowspan=2 |
| VC-1 | ||
| H.264/MPEG-4 AVC | ||
| H.265/HEVC 8bit | rowspan=2 | |
| H.265/HEVC 10bit | ||
| VP8 | rowspan=3 | |
| VP9 8bit | ||
| VP9 10bit | ||
- 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), задайте переменную окружения .
- 2 NVDECODE/NVENCODE отключён в пакете Arch.
- 3 Поддержка VA-API доступна в .
- 4 VDPAU поддерживается только NPAPI-плагином. Доступен экспериментальный адаптер в виде PPAPI-плагина для NPAPI-браузеров, который частично поддерживает ускорение VA-API и VDPAU.
- 5 Поддержка VA-API доступна в . Wayland не поддерживается, а XWayland не работает корректно (англ.) с libva-intel-driver.
- 6 Начиная с Firefox 75 (). В Firefox 75 поддерживаются только технологии H.264 и Wayland, а поддержка отличных от H.264 стандартов реализована в Firefox 76 и выше. Поддержка X11 на данный момент отсутствует.