Hardware video acceleration (Русский)
Аппаратное ускорение видео позволяет выполнять операции кодирования и декодирования видео на стороне видеокарты, разгружая процессор и экономя энергию.
Существуют несколько реализаций этой технологии на Linux:
- Video Acceleration API (VA-API) — разработанная Intel спецификация и свободная библиотека, предоставляющая аппаратное ускорение кодирования и декодирования видео.
- Video Decode and Presentation API for Unix (VDPAU) — разработанная NVIDIA свободная библиотека и API для переноса части процесса декодирования видео и его постобработки на сторону видеокарты.
- Advanced Media Framework SDK (AMF) — разработанный AMD свободный фреймворк, который обеспечивает «оптимальный» доступ к видеокартам AMD для обработки мультимедиа с помощью стека AMDGPU PRO.
- NVDEC/NVENC — разработанные NVIDIA проприетарные API для аппаратного ускорения видео, используемые для Fermi и более новых видеокарт.
- Vulkan Video — расширение Vulkan для аппаратного кодирования и декодирования видео.
Также всесторонний обзор поддержки данных технологий со стороны драйверов и приложений доступен в разделе #Сравнительные таблицы.
Установка
Intel
VA-API
Свободные драйверы Intel graphics поддерживают VA-API:
- Серия HD Graphics, начиная с Broadwell (2014) и новее (например, Intel Arc), поддерживается intel-media-driver.
- GMA 4500 (2008) и более новые GPU до Coffee Lake (2017) поддерживаются libva-intel-driver.
- Декодирование H.264 на GMA 4500 поддерживается libva-intel-driver-g45-h264AUR, см. Intel graphics (Русский)#Декодирование H.264 на GMA 4500.
- Декодирование VP9 на процессорах от Haswell Refresh до Skylake, а также гибридное декодирование VP8 на процессорах от Broadwell до Skylake поддерживаются intel-hybrid-codec-driver-gitAUR.
Смотрите также список поддерживаемого оборудования и доступных возможностей на сайте Intel.
Vulkan
Свободный Vulkan-драйвер ANV, предоставляемый пакетом vulkan-intel, поддерживает Vulkan Video.
Intel Video Processing Library (Intel VPL)
Для Intel VPL установите базовую библиотеку libvpl и как минимум одну из реализаций:
- vpl-gpu-rt: поддерживает Tiger Lake и более новую графику Intel
- intel-media-sdk (разработка прекращена): поддерживает старую графику Intel
NVIDIA
Свободный драйвер Nouveau поддерживает как VA-API, так и VDPAU:
- GeForce 8 series и новее (до GeForce GTX 750) поддерживаются mesa.
- Необходим nouveau-fwAUR — пакет с микропрограммой, которая на сегодняшний день извлекается из бинарного драйвера NVIDIA.
Проприетарный драйвер NVIDIA поддерживает следующие технологии с помощью пакета nvidia-utils:
- VDPAU на серии GeForce 8 и новее;
- NVDEC на Fermi и новее [1];
- NVENC на Kepler и новее;
- Vulkan Video на Pascal и новее [2].
AMD/ATI
Свободные драйверы AMDGPU и ATI поддерживают как VA-API, так и VDPAU через mesa:
- VA-API на Radeon HD 2000 и новее.
- VDPAU на Radeon R600 и новее.
Свободный Vulkan-драйвер RADV, предоставляемый пакетом vulkan-radeon, поддерживает Vulkan Video.
Проприетарный драйвер AMDGPU PRO работает поверх AMDGPU и в дополнение к VA-API и VDPAU также поддерживает AMF.
- AMF на Fiji и более новых видеокартах поддерживается amf-amdgpu-proAUR.
- Вам может понадобиться настроить используемые вами приложения на использование Vulkan-драйвера AMDGPU PRO.
- Кодирование HEVC может быть недоступно на Navi и более старых видеокартах.
Слои трансляции
- libvdpau-va-gl — Драйвер, который позволяет приложениям VDPAU использовать OpenGL/VAAPI. Только H.264.
- nvidia-vaapi-driver — Драйвер, который позволяет приложениям VA-API (в первую очередь Firefox) использовать CUDA NVDEC.
Проверка
Аппаратное ускорение, скорее всего, хорошо заработает по умолчанию. Проверить это можно описанными ниже способами.
- mpv отлично подходит для проверки аппаратного ускорения на практике. Запустите
mpv --hwdec=auto видеофайл
и изучите выводимый в консоли журнал. Подробнее в документации mpv: hwdec. - nvtop позволяет проверить уровень нагрузки на декодер (строка «DEC» вверху) во время воспроизведения видео на видеокартах AMD, Intel и NVIDIA.
- Для Intel можно запустить
intel_gpu_top
из пакета intel-gpu-tools (от имени суперпользователя) для мониторинга нагрузки, например, во время воспроизведения видео. Ненулевое значение video означает работу аппаратного ускорения видео. - Для AMD можно использовать radeontop, но отображение нагрузки на декодер может не работать на некоторых видеокартах [3].
- При использовании любой видеокарты вы также можете проверить нагрузку на процессор с помощью любого системного монитора вроде htop. При включенном аппаратном ускорении видео нагрузка на процессор должна быть существенно ниже, чем без ускорения, особенно при воспроизведении видео в высоком разрешении (4K и более) или на маломощных ноутбуках.
Проверка 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
:
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3
Если при выполнении 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 ...
Проверка Vulkan Video
Установите пакет vulkan-tools и используйте команду vulkaninfo для получения информации о доступных расширениях для работы с видео:
$ vulkaninfo | grep VK_KHR_video_
VK_KHR_video_decode_av1 : extension revision 1 VK_KHR_video_decode_h264 : extension revision 9 VK_KHR_video_decode_h265 : extension revision 8 VK_KHR_video_decode_queue : extension revision 8 VK_KHR_video_encode_h264 : extension revision 14 VK_KHR_video_encode_h265 : extension revision 14 VK_KHR_video_encode_queue : extension revision 12 VK_KHR_video_maintenance1 : extension revision 1 VK_KHR_video_queue : extension revision 8
Настройка
Несмотря на то, что видеодрайвер должен автоматически активировать поддержку аппаратного ускорения видео с помощью VA-API и VDPAU, в некоторых случаях может потребоваться настроить VA-API/VDPAU вручную. Перед тем как продолжать чтение данного раздела, просмотрите раздел #Проверка.
Названия драйверов по умолчанию, которые будут использоваться при отсутствии настроек, угадываются системой. Однако зачастую это может не работать. Предполагаемые значения можно просмотреть в журнале Xorg (~/.local/share/xorg/Xorg.0.log
при запуске от имени обычного пользователя или /var/log/Xorg.0.log
при запуске от имени root):
$ grep -iE 'vdpau | dri driver' журнал_xorg
(II) RADEON(0): [DRI2] DRI driver: radeonsi (II) RADEON(0): [DRI2] VDPAU driver: radeonsi
В данном случае по умолчанию используется radeonsi
для VA-API и VDPAU.
journalctl -b --grep='vdpau | dri driver'
.Имейте в виду, что эти строки не отображают настройки: значения не изменятся даже после выбора другого драйвера.
Настройка VA-API
Драйвер VA-API можно переопределить с помощью переменной окружения LIBVA_DRIVER_NAME
:
- Intel graphics:
- Укажите
i965
, если используется libva-intel-driver. - Укажите
iHD
, если используется intel-media-driver.
- Укажите
- NVIDIA:
- 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, Mesa предоставляет
radeonsi
вместоgallium
.
Настройка VDPAU
Драйвер VDPAU можно переопределить с помощью переменной окружения VDPAU_DRIVER
.
Корректное название драйвера зависит от конфигурации:
- Если используется Intel graphics, необходимо задать
va_gl
. - Если используется свободный драйвер AMD, задайте
radeonsi
. - Если используется свободный драйвер Nouveau, задайте
nouveau
. - Если используется проприетарный драйвер NVIDIA, задайте
nvidia
.
- Установленные драйверы находятся в
/usr/lib/vdpau/
и используются как/usr/lib/vdpau/libvdpau_${VDPAU_DRIVER}.so
. - Некоторые драйверы устанавливаются несколько раз под разными именами в целях совместимости. Их список можно увидеть, выполнив команду
sha1sum /usr/lib/vdpau/*
. - В случае с конфигурацией с гибридной графикой (как с NVIDIA, так и с AMD), может потребоваться задать переменную окружения
DRI_PRIME=1
. См. статью PRIME для получения более подробной информации.
Настройка Vulkan Video
- Intel graphics: поддержку Vulkan Video в vulkan-intel можно включить с помощью переменной окружения
ANV_DEBUG=video-decode,video-encode
. - AMD: поддержка Vulkan Video в vulkan-radeon включена по умолчанию для VCN 2, 3 и 4+, начиная с Mesa 25. Чтобы включить её для более старых видеокарт, установите переменную окружения
RADV_PERFTEST
со значениемvideo_decode,video_encode
.
Настройка приложений
Мультимедийные фреймворки:
Видеоплееры:
- Kodi#Hardware video acceleration (англ.)
- MPlayer#Hardware video acceleration (англ.)
- mpv (Русский)#Аппаратное декодирование
- VLC media player#Hardware video acceleration (англ.)
Веб-браузеры:
- Chromium#Hardware video acceleration (англ.)
- Firefox (Русский)#Аппаратное ускорение видео
- GNOME (Русский)/Web (Русский)#Видео
Запись и потоковое вещание:
Решение проблем
Ошибка "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.
Повреждённое видео при декодировании с помощью драйвера AMDGPU
В некоторых приложениях, некорректно обрабатывающих 10-битную глубину цвета, может наблюдаться повреждение изображения при использовании аппаратного декодирования видео. В качестве обходного пути можно запустить проблемное приложение с переменной окружения allow_rgb10_configs=false
. [4]
Сравнительные таблицы
Драйверы VA-API
Кодек | libva-intel-driver [5] | intel-media-driver [6] | mesa [7] [8] | libva-nvidia-driver (адаптер NVDEC) |
---|---|---|---|---|
Декодирование | ||||
MPEG-2 | GMA 4500 и новее | Broadwell и новее | Radeon HD 6000 и новее GeForce 8 и новее1 |
Смотрите #Драйвер NVIDIA |
H.263/MPEG-4 Visual4 | Нет | Нет | 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 и новее Гибридное: от Haswell refresh до Skylake3 |
Broxton/Apollo Lake и новее | Raven Ridge + Radeon RX 5000 и новее | |
VP9 10bit & 12bit | Kaby Lake и новее | Kaby Lake и новее | ||
AV1 8bit & 10bit | Нет | Tiger Lake и новее | Radeon RX 6600 и выше/новее | |
Кодирование | ||||
MPEG-2 | Ivy Bridge и новее | Broadwell и новее кроме Broxton/Apollo Lake |
Нет | Нет5 |
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 + Radeon RX 5000 и новее | |
VP8 | Cherryview/Braswell и новее Гибридное: от Haswell до Skylake3 |
Нет | ||
VP9 8bit | Kaby Lake и новее | Ice Lake и новее | ||
VP9 10bit & 12bit | Нет | |||
AV1 8bit & 10bit | Alchemist и новее | Radeon RX 7900 и выше/новее |
- До GeForce GTX 750.
- Поддерживается libva-intel-driver-g45-h264AUR.
- Гибридный кодировщик VP8 и декодировщик VP9 поддерживается intel-hybrid-codec-driver-gitAUR.
- MPEG-4 Part 2 отключён по умолчанию из-за ограничений VAAPI. Задайте переменную окружения
VAAPI_MPEG4_ENABLED=true
, если вы всё-таки хотите протестировать данную функцию. - Адаптер NVIDIA CUDA находится в активной разработке, и набор поддерживаемых возможностей может измениться в будущем [9].
Драйверы VDPAU
Кодек | Глубина цвета |
mesa [10] [11] | nvidia-utils | libvdpau-va-gl (адаптер VA-API) |
---|---|---|---|---|
Декодирование | ||||
MPEG-2 | 8bit | Radeon R600 и новее GeForce 8 и новее1 |
GeForce 8 и новее | Нет |
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 и новее | Смотрите #Драйверы VA-API |
H.265/HEVC | 8bit | Radeon R9 Fury и новее | GeForce 900 и новее3 | Нет |
10bit | Radeon 400 и новее | Нет4 | ||
VP9 | 8bit | Raven Ridge + Radeon RX 5000 и новее | GeForce 900 и новее3 | |
10bit/12bit | Нет4 | |||
AV1 | 8bit | Radeon RX 6600 и выше/новее | GeForce 30 и новее5 | |
10bit | Нет4 |
- До GeForce GTX 750.
- Кроме GeForce 8800 Ultra, 8800 GTX, 8800 GTS (320/640 MB).
- Кроме GeForce GTX 970 и GTX 980.
- Реализация NVIDIA ограничена 8-битными потоками [12] [13].
- Начиная с драйвера версии 510.[14]
Драйвер NVIDIA
Кодек | nvidia-utils [15] | |
---|---|---|
NVDEC | NVENC | |
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 & 12bit | Pascal и новее | |
AV1 8bit & 10bit | Ampere и новее3 | Ada Lovelace и новее |
- Кроме GM108 (не поддерживается)
- Кроме GM108 и GP108 (не поддерживаются)
- Кроме A100 (не поддерживается)
Поддержка приложениями
Приложение | Декодирование | Кодирование | Документация | |||||
---|---|---|---|---|---|---|---|---|
VA-API | VDPAU | NVDEC | Vulkan | VA-API | NVENC | Vulkan | ||
FFmpeg | Да | Да | Да | Да | Да | Да | Да | FFmpeg#Hardware video acceleration (англ.) |
GStreamer | Да | Нет | Да | Да | Да | Да | Нет | GStreamer#Hardware video acceleration (англ.) |
Kodi | Да | Да | Нет | Нет | – | – | – | Kodi#Hardware video acceleration (англ.) |
mpv | Да | Да | Да | Да | – | – | – | mpv (Русский)#Аппаратное декодирование |
VLC media player | Да | Да | Нет | Нет | – | – | – | VLC media player#Hardware video acceleration (англ.) |
MPlayer | Нет | Да | Нет | Нет | – | – | – | MPlayer#Hardware video acceleration (англ.) |
Flash | Нет1 | Да1 | Нет | Нет | – | – | – | Browser plugins#Adobe Flash Player (англ.) |
Chromium | Да | Нет | Нет | Нет | Да | Нет | Нет | Chromium#Hardware video acceleration (англ.) |
Firefox | Да | Нет | Нет | Нет | Нет | Нет | Нет | Firefox (Русский)#Аппаратное ускорение видео |
GNOME Web | GStreamer | ? | ? | ? | GNOME (Русский)/Web (Русский)#Видео |
- VDPAU поддерживается только NPAPI-плагином. Доступен экспериментальный адаптер в виде PPAPI-плагина для NPAPI-браузеров, который частично поддерживает ускорение VA-API и VDPAU.