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 i965-va-driver-shaders 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.

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: