Hardveresen támogatott videólejátszás bekapcsolása

kami911 képe

A hardveresen támogatott videólejátszás bekapcsolásával a videólejátszástól tehermentesíteni lehet a CPU-t, mert a dekódolási munkát a GPU végzi. Ezzel a videólejátszás folyamatosabb lehet és kevesebb energiát is fogyaszt.

A számítógépben lévő grafikuskártyától függően, az alábbi lehetőségek adottak:

  • Video Acceleration API (VA-API) egy egységesített felület és nyílt forráskódú programkönyvtár a hardveresen gyorsított videó-lejátszáshoz és -készítéshez. Az Intel fejlesztése.
  • Video Decode and Presentation API for Unix (VDPAU) egy nyílt forráskódú programkönyvtár és alkalmazásprogramozási interfésze (API) amivel a a videólejátszási feladatok egy része átterhelhető a GPU hardverre. Az NVIDIA fejlesztése.
  • NVDECODE/NVENCODE - Az NVIDIA tulajdonosi alkalmazásprogramozási interfésze (API) a hardveresen gyorsított videó-lejátszáshoz és -készítéshez. Az NVIDIA GPU- működik csak a Fermi kódjelű kártyáktól kezdve. Az NVIDIA fejlesztése.

A Video Acceleration API (VA-API) lehetővé teszi a hardveresen gyorsított videódekódolást és -dekódolást különböző műveletek (VLD, IDCT, mozgáskompenzáció stb.) és a a napjainkban elterjedt kódolási szabványokhoz (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264 és VC-1/WMV3). Interfészt biztosítja a mai GPU-k videódekódolási képességeinek teljes körű kiaknázásához. Linux alatt ez a legszélesebb körben támogatott eljjárás.

AMD és Intel gyártmányok, valamint a nyílt forráskódú illesztőprogramot használó NVIDIA gyártmány esetén közvetlenül használható a VA-API. Linux-on jelenleg a VA-API támogatását több csomag valósítja meg, gyártók szerint ezek a következőek:

AMD Radeon , NVIDIA nyílt forráskódú illesztőprogramok

AMDGPU és Radeon és nouveau

A mesa-va-drivers csomag

Ezek a könyvtárak biztosítják a videó gyorsító API-t (VA-API) Unix számára. Gyorsított videolejátszást és videó utófeldolgozást biztosítanak a támogatott grafikus kártyák számára. Ez a csomag lehetővé teszi a VA-API támogatását egyes gallium illesztőprogramok számára.

Támogatott illesztőprogramok: amdgpu, radeon, nouveau

Telepítés AMD AMDGPU és Radeon illesztőprogram esetén:

sudo apt install mesa-va-drivers libva2 vainfo

Telepítés NVIDIA nouveau illesztőprogram esetén:

sudo apt install mesa-va-drivers libva2 vainfo

Intel

Intel G45 & HD Graphics hardvercsalád

Az i965-va-driver és az i965-va-driver-shaders csomagok

Ez a csomag tartalmazza az Intel G45 lapkakészletekhez és az Intel Core processzorcsaládhoz tartozó Intel HD Graphics-hoz tartozó videó dekódoló és kódoló illesztőprogramokat. A támogatott platformok a következők:

  •  Cantiga, Intel GMA 4500MHD (GM45)
  •  Ironlake, Intel HD Graphics a 2010-es Intel Core processzorcsalád számára
  •  Sandy Bridge, Intel HD Graphics a 2011-es Intel Core processzorcsalád számára
  •  Ivy Bridge
  •  Haswell
  •  Broadwell
  •  Skylake
  •  Kaby Lake
  •  Coffee Lake
  •  Cannon Lake

Telepítés Intel G45 lapkakészletekhez és az Intel Core processzorcsaládhoz tartozó Intel HD Graphics-hoz illesztőprogram esetén:

sudo apt install i965-va-driver libva2 vainfo

Intel GEN8+ Graphics hadvercsalád

Az intel-media-va-driver-non-free és az intel-media-va-driver-non-free csomagok

Ez a csomag az Intel Core processzorcsalád Intel HD Graphics processzoraihoz tartozó videó dekódoló és kódoló illesztőprogramokat tartalmazza. A támogatott platformok a következők:

  •  Broadwell
  •  Skylake
  •  Broxton
  •  Apollo Lake
  •  Kaby Lake
  •  Coffee Lake
  •  Whiskey Lake
  •  Cannon Lake
  •  Ice Lake

Telepítés Intel G45 lapkakészletekhez és az Intel Core processzorcsaládhoz tartozó Intel HD Graphics-hoz illesztőprogram esetén:

sudo apt install intel-media-va-driver intel-media-va-driver-non-free libva2 vainfo

NVIDIA zárt illesztőprogramok

A vdpau-va-driver csomag

A zárt NVIDIA illesztőprogram nem támogatja  a VA-API-t, csak a VDPAU-t. A Video Decode and Presentation API for Unix (VDPAU) egy nyílt forráskódú programkönyvtár és alkalmazásprogramozási interfésze (API) amivel a a videólejátszási feladatok egy része átterhelhető a GPU hardverre. Az NVIDIA fejlesztése. Zárt forráskódú NVIDIA illesztőprogram esetén használható a VDPAU hívásokat VA-API hívásokká alakító illesztőprogram, a vdpau-va-illesztőprogram.

sudo apt install vdpau-va-driver libva2 vainfo

Az összes illesztőprogram telepíthető a „va-driver-all” csomag telepítésével.

VDPAU telepítése

Amennyiben nem a VA-API-t kívánja a hardveresen gyorsított videólejátszáshoz használni.

A VDPAU telepíthető a Mesa illesztőprogramok esetében a következő módon:

sudo apt install libvdpau1 mesa-vdpau-drivers

A VDPAU telepíthető a NVIDIA zárt illesztőprogramok esetében a következő módon:

sudo apt install libvdpau1 nvidia-vdpau-driver

Az összes illesztőprogram telepíthető a „vdpau-driver-all” csomag telepítésével.

VA-API információk lekérdezése

Az információk lekérdezésével megtudhatja, hogy a videólejátszó hardver milyen formátumok lejátszását tudja hardveresen gyorsítani.

A VA-API információs eszköz telepítése:

apt install vainfo

Futtassuk a parancsot:

vainfo

Az általa kinyerhető információk:

error: XDG_RUNTIME_DIR not set in the environment.
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Mesa Gallium driver 20.0.8 for AMD Radeon RX 5700 XT (NAVI10, DRM 3.37.0, 5.7.1-050701-generic, LLVM 10.0.0)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :    VAEntrypointVLD
      VAProfileMPEG2Main              :    VAEntrypointVLD
      VAProfileVC1Simple              :    VAEntrypointVLD
      VAProfileVC1Main                :    VAEntrypointVLD
      VAProfileVC1Advanced            :    VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:    VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:    VAEntrypointEncSlice
      VAProfileH264Main               :    VAEntrypointVLD
      VAProfileH264Main               :    VAEntrypointEncSlice
      VAProfileH264High               :    VAEntrypointVLD
      VAProfileH264High               :    VAEntrypointEncSlice
      VAProfileHEVCMain               :    VAEntrypointVLD
      VAProfileHEVCMain               :    VAEntrypointEncSlice
      VAProfileHEVCMain10             :    VAEntrypointVLD
      VAProfileJPEGBaseline           :    VAEntrypointVLD
      VAProfileVP9Profile0            :    VAEntrypointVLD
      VAProfileVP9Profile2            :    VAEntrypointVLD
      VAProfileNone                   :    VAEntrypointVideoProc

Példa egy régebbi videokártya szerényebb képességeire:

vainfo
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva error: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_6
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Mobile - 2.4.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :    VAEntrypointVLD
      VAProfileMPEG2Simple            :    VAEntrypointEncSlice
      VAProfileMPEG2Main              :    VAEntrypointVLD
      VAProfileMPEG2Main              :    VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:    VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:    VAEntrypointEncSlice
      VAProfileH264Main               :    VAEntrypointVLD
      VAProfileH264Main               :    VAEntrypointEncSlice
      VAProfileH264High               :    VAEntrypointVLD
      VAProfileH264High               :    VAEntrypointEncSlice
      VAProfileH264MultiviewHigh      :    VAEntrypointVLD
      VAProfileH264MultiviewHigh      :    VAEntrypointEncSlice
      VAProfileH264StereoHigh         :    VAEntrypointVLD
      VAProfileH264StereoHigh         :    VAEntrypointEncSlice
      VAProfileVC1Simple              :    VAEntrypointVLD
      VAProfileVC1Main                :    VAEntrypointVLD
      VAProfileVC1Advanced            :    VAEntrypointVLD
      VAProfileNone                   :    VAEntrypointVideoProc
      VAProfileJPEGBaseline           :    VAEntrypointVLD

Látható, hogy míg az előbbi 5700XT GPU-val szerelt kártya képes például a Youtube által használt H264, VP9 formátumokat is gyorsítani, a HEVC és VC1 mellett, addig a szerényebb képességekkel rendelkező Haswell Mobile GPU a VP9 formátumot sem támogatja. Ebből is látható, hogy fontos megnézni, hogy pontosan az adott eszköz hardveresen milyen formátumokat támogat.

Másodlagos videólejátszó elérése

Ha az adott eszközben több GPU is található, lekérdezhető a másodlagos eszküz képessége is:

DRI_PRIME=1 vainfo

Amennyiben ez nem működne, megadható még a második GPU-hoz használandó illesztőprogram is a következő módon:

DRI_PRIME=1 LIBVA_DRIVER_NAME=radeonsi vainfo

Az elérhető illesztőprogramok listájának lekérése:

ls -1 /usr/lib/x86_64-linux-gnu/dri/*_video.so

A jelenlegi lista:

  • i965
  • iHD
  • nouveau
  • r600
  • radeonsi

VDPAU információk lekérdezése

Az információk lekérdezésével megtudhatja, hogy a videólejátszó hardver milyen formátumok lejátszását tudja hardveresen gyorsítani.

A VDPAU információs eszköz telepítése:

apt install vdpauinfo

Futtassuk a parancsot:

vdpauinfo

Az általa kinyerhető információk:

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 65536  4096  4096
MPEG2_MAIN                      3 65536  4096  4096
H264_BASELINE                  52 65536  4096  4096
H264_MAIN                      52 65536  4096  4096
H264_HIGH                      52 65536  4096  4096
VC1_SIMPLE                      1 65536  4096  4096
VC1_MAIN                        2 65536  4096  4096
VC1_ADVANCED                    4 65536  4096  4096
MPEG4_PART2_SP                  3 65536  4096  4096
MPEG4_PART2_ASP                 5 65536  4096  4096
DIVX4_QMOBILE                  --- not supported ---
DIVX4_MOBILE                   --- not supported ---
DIVX4_HOME_THEATER             --- not supported ---
DIVX4_HD_1080P                 --- not supported ---
DIVX5_QMOBILE                  --- not supported ---
DIVX5_MOBILE                   --- not supported ---
DIVX5_HOME_THEATER             --- not supported ---
DIVX5_HD_1080P                 --- not supported ---
H264_CONSTRAINED_BASELINE       0 65536  4096  4096
H264_EXTENDED                  --- not supported ---
H264_PROGRESSIVE_HIGH          --- not supported ---
H264_CONSTRAINED_HIGH          --- not supported ---
H264_HIGH_444_PREDICTIVE       --- not supported ---
HEVC_MAIN                      186 139264  8192  4352
HEVC_MAIN_10                   186 139264  8192  4352
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
R8G8B8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
R10G10B10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
B10G10R10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         16384 16384
R8G8B8A8         16384 16384
R10G10B10A2      16384 16384
B10G10R10A2      16384 16384
A8               16384 16384

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     -
INVERSE_TELECINE                 -
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         y
HIGH QUALITY SCALING - L1        y
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y        48     4096
VIDEO_SURFACE_HEIGHT             y        48     4096
CHROMA_TYPE                      y  
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y  
CSC_MATRIX                       y  
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y  
LUMA_KEY_MAX_LUMA                y  

https://directory.fsf.org/wiki/VDPAU_info_tool

A GPU használat ellenőrzése

A videókártya GPU használata alapján látható, hogy a rendszer a CPU-t vagy a GPU-t használja a videólejátszáshoz. A CPU használat és load értékek megtekinthetőek a „top” és „htop” alkalmazásokban. A GPU használatához az adott GPU-hoz szabott szeközt használhatja.

AMD Radeon GPU

AMD Radeon GPU esetében a „radeontop” amelyet telepíthet, a

sudo apt install radeontop

paranccsal, majd pedig futtathat a:

sudo radeontop

paranccsal.

Intel GPU

Intel GPU esetében a „sudo intel_gpu_top” amelyet telepíthet, a

sudo apt install intel-gpu-tools

paranccsal, majd pedig futtathat a:

sudo sudo intel_gpu_top

paranccsal.

Beállítások a lejátszó szoftverekben

MVP alapú lejátszók

Az MVP alapú lejátszók (MVP, Hypnotix) számára lehetőség van a

hwdec=vaapi

beállítás elvégzésére a VAAPI beállytás támogatására. Ez azonban az MVP dokumentációja szerint nem támogatott:

A HW-dekódolás állandó engedélyezése a konfigurációs fájlban nem javasolt. Ha az Ubuntu csomagot használja, törölje az /etc/mpv/mpv.conf állományt, mivel a csomag a hwdec=vaapi beállításával megpróbálja alapértelmezés szerint engedélyezni a hardver dekódolást (ami nem ideális, és még az optimálistól eltérő wrapperek használatát is okozhatja). Vagy legalább változtassa meg

hwdec=auto-safe

beállításra.

FFmpeg alapú lejátszók

FFmpeg-ben terminálban megadható a VA-API használata, az alábbi terminállal parancssori kapcsolóval:

ffmpeg -hwaccel vaapi

Melléklet: