ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Video-Dekodierung beschleunigen

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/movies.png Die Video-Dekodierung ist vor allem bei hochauflösenden (HD-)Videos ein sehr rechenintensiver Prozess, bei dem schwache Prozessoren (z.B. in Netbooks) überfordert sind und auch Mittelklasse-CPUs an ihre Leistungsgrenzen bringen. Um die CPU zu entlasten und die Dekodierung von HD-Videos auf weniger gut ausgestatteten Systemen überhaupt erst zu ermöglichen, bieten moderne Grafikchips eine Hardwareunterstützung zur Videodekodierung an. Während es zu deren Nutzung auf Windows-Systemen eine einheitliche Schnittstelle gibt (DirectX), gibt es unter Linux gleich drei verschiedene. Jeder der großen Grafikkarten-Hersteller bietet hier eine eigene Lösung:

Durch verschiedene Treiber bzw. API-Bibliotheken ist es aber auch möglich, die beiden verbreiteten Lösungen VA API und VDPAU herstellerübergreifend zu nutzen. ACHTUNG: Unter dem Wayland/Weston Compositor, der ab Ubuntu 17.10 zumindest optional zum Einsatz kommen wird, ist nur noch eine Videobeschleunigung über VAAPI möglich, aus technischer Sicht ist VDPAU daher keine Zukunftslösung.

Voraussetzungen

Damit Videobeschleunigung durch die Hardware genutzt werden kann, müssen mehrere Bedingungen erfüllt sein:

  1. Der Grafikchip muss eine Videobeschleunigung bieten

  2. Der zugehörige Grafiktreiber muss diese unterstützen (meist sind dies nur durch die proprietären Treiber der Hersteller möglich, ab Kernel 3.13 auch mit denn freien Treiber radeon möglich)

  3. Es muss eine passende Bibliothek für die verwendete API installiert sein

  4. Die Videoplayer-Software muss die API unterstützen

Die Videobeschleunigung wird unter Ubuntu bisher von Haus aus leider nur sehr stiefmütterlich behandelt. Es müssen daher einige Pakete nachinstalliert und ggf. ein Personal Package Archiv (PPA) eingebunden werden.

Die API von AMD/ATI (XvBA) entspricht ziemlich genau dem DirectX-API unter Windows, was es dem Hersteller ermöglicht, für Linux im Prinzip den gleichen Grafiktreiber einzusetzen wie für Windows. Damit wird doppelter Entwicklungsaufwand vermieden und ermöglicht, zeitgleich mit der Windows-Version auch eine Linux-Version der Treiber anzubieten (AMD/ATI liefert monatlich Updates seines fglrx-Treibers).

Die schlechte Nachricht: die XvBA API wird unter Linux so gut wie überhaupt nicht unterstützt. Und die gute Nachricht: es gibt eine Bibliothek, die Intels VA API in die XvBA API umsetzt, so dass jede Software genutzt werden kann, die das VA API unterstützt. Dadurch hat man es im Wesentlichen nur noch mit 2 APIs zu tun: VA API und VDPAU.

Neben der Installation der benötigen Bibliotheken für die API des eigenen Systems wird auch noch ein Videoplayer benötigt, der Unterstützung für die jeweilige API nicht nur anbietet, sondern auch einkompiliert hat. Hier gibt es nur wenige Alternativen.

Videoplayer

VLC

Der allseits beliebte VLC-Player bietet eine Unterstützung für die verschiedenen installierten API's an. Standard ist automatisch. VLC bietet aber nur eine sehr eingeschränkte Unterstützung an. Aufgrund der Philosophie von VLC, dass Videos gestreamt und zu jedem beliebigen Ziel umgeleitet werden können, muss VLC den Videostream nach der Decodierung vom Grafikchip abholen und ihn anschließend (falls die Ausgabe auf den Bildschirm erfolgen soll) erneut zur Grafikkarte senden. Auf diese Weise wird kaum ein Vorteil aus der Hardwaredecodierung gewonnen.

Siehe auch VLC GPU Dekodierung im VLC-Wiki 🇬🇧

Kodi

Kodi (ehemals XBMC) ist der am besten funktionierende Videoplayer mit Hardwareunterstützung. Er bietet Unterstützung für beide APIs an. Allerdings müssen auch hier Versionen mit VA API oder VDPAU selbst kompiliert oder aus einem PPA installiert werden.

Eine ältere Anleitung zur Hardwarebeschleunigung 🇬🇧 findet man im Kodi-Wiki.

Für VDPAU lässt sich Kodi aus dem PPA des team-xbmc installieren. Eine Anleitung 🇬🇧 findet sich wiederum im Kodi-Wiki. VDPAU wird in dieser Version direkt ohne weitere Einstellungen unterstützt.

MPlayer

MPlayer bietet ebenfalls sehr gute Unterstützung für beide APIs an, muss jedoch auch selbst kompiliert werden oder aus einem PPA installiert werden, da in den offiziellen Paketquellen diese Unterstützung fehlt. MPlayer ist ein Player für die Kommandozeile, für den es Zusätze zur grafischen Bedienung gibt (z.B. GNOME MPlayer oder SMPlayer). SMPlayer bietet die Möglichkeit, eine selbstkompilierte Version von MPlayer zu nutzen (der Pfad zum eigentlichen Abspielprogramm ist frei konfigurierbar).

MPlayer mit VA API Untersützung kann als Paket mplayer-vaapi aus dem PPA von Sander van Grieken installiert werden.

Bei der Verwendung des GNOME MPlayer muss als Videoausgabe "vdpau" oder "vaapi" eingestellt und ein Häkchen bei "Enable Video Hardware Support" gesetzt werden.

Mpv

mpv ist eine Abspaltung und Weiterentwicklung des MPlayers. Entwicklungsziele waren die bessere Unterstützung der Fähigkeiten moderner Grafikkarten (GPUs) und die Integration der beim MPlayer in das Programm MEncoder ausgelagerten Funktionen zur Erstellung und Konvertierung von Audio- und Video-Dateien.

Totem

Totem gibt Videos über GStreamer aus. Für GStreamer stellt das Paket gstreamer1.0-vaapi bzw. für ältere Ubuntu-Versionen gstreamer0.10-vaapi eine Ausgabe über VA API zur Verfügung.

Flash-Plugin

Adobe Flash bietet Unterstützung zur Videobeschleunigung über VDPAU an, welche explizit aktiviert werden muss. Die Alternative Gnash bietet Unterstützung für VA API, allerdings nur, wenn man es selbst kompiliert.

Vorbereitungen

Voraussetzung ist natürlich, dass man einen Grafikprozessor hat, der Videobeschleunigung unterstützt. Informationen, welche Grafik im System steckt, findet man im Terminal mit folgendem Befehl heraus:

lspci -nnk | grep -i VGA -A2 

Das sieht dann z.B. so aus:

01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Caicos [Radeon HD 7450A] [1002:6772]
	Subsystem: Lenovo Device [17aa:3623]
	Kernel driver in use: fglrx_pci

Jetzt muss nur noch in Erfahrung gebracht werden, ob die eingebaute Karte auch eine Videobeschleunigung besitzt. Bei AMD/ATI sollte das bei allen Modellen der Radeon-Serie der Fall sein. Für Nvidia-Karten findet man eine Auflistung in der Wikipedia und für Intel-Grafik findet man eine Übersicht in der englischen Wikipedia.

Installation

Systeme mit AMD/ATI-Grafik

Grafiktreiber

Als Treiber für die Grafikkarte kommt der proprietäre fglrx (bis einschließlich Ubuntu 14.04) in Frage. Der freie radeon-Treiber, der in den offiziellen Paketquellen vorhanden ist, bietet erst ab Kernel 3.13 (also ab Ubuntu 14.04) eine Videobeschleunigung.

Unterstützung für VA-API-fglrx-Treiber

Die erforderlichen Laufzeitbibliotheken befinden sich im Paket xvba-va-driver. Diese übersetzen VA-API-Aufrufe in die entsprechenden XvBA-Aufrufe. Zusätzlich kann das Paket vainfo installiert werden. Damit lässt sich überprüfen, ob die Videobeschleunigung korrekt erkannt wird.

  • xvba-va-driver (XvBA-basiertes Backend für VA API)

  • vainfo

Befehl zum Installieren der Pakete:

sudo apt-get install xvba-va-driver vainfo 

Oder mit apturl installieren, Link: apt://xvba-va-driver,vainfo

Unterstützung für vdpau-radeon-Treiber ab Trusty

  • mesa-vdpau-drivers

  • libvdpau1

  • vdpauinfo

Befehl zum Installieren der Pakete:

sudo apt-get install mesa-vdpau-drivers libvdpau1  vdpauinfo 

Oder mit apturl installieren, Link: ,vdpauinfo

Unterstützung für VA-API-radeon-Treiber

  • mesa-va-drivers

  • vainfo

Befehl zum Installieren der Pakete:

sudo apt-get install mesa-va-drivers vainfo 

Oder mit apturl installieren, Link: apt://mesa-va-drivers,vainfo

Systeme mit Nvidia-Grafik

Grafiktreiber

Als Treiber für die Grafikkarte kommt nur der proprietäre nvidia in Frage. Der freie nouveau-Treiber bietet keine Videobeschleunigung an.

Unterstützung für VDPAU

Für die VDPAU-Unterstüzung werden folgende Bibliotheken benötigt [1]:

  • libvdpau1

  • vdpauinfo

Befehl zum Installieren der Pakete:

sudo apt-get install libvdpau1 vdpauinfo 

Oder mit apturl installieren, Link: apt://libvdpau1,vdpauinfo

Unterstützung für VA-API

Soll ein Player mit VA-API verwendet werden, muss zusätzlich das Paket vdpau-va-driver installiert werden. Hierbei werden VA-API-Aufrufe in VDPAU-Aufrufe übersetzt.

  • vdpau-va-driver (VDPAU-basiertes Backend für VA-API)

  • vainfo

Befehl zum Installieren der Pakete:

sudo apt-get install vdpau-va-driver vainfo 

Oder mit apturl installieren, Link: apt://vdpau-va-driver,vainfo

Systeme mit Intel-Grafik

Grafiktreiber

Der native, standardmäßig verwendete Linux-Treiber ermöglicht grundsätzlich Videobeschleunigung.

Unterstützung für VA-API

Für die Unterstützung der VA-API auf Intel Grafikchipsätzen werden folgende Pakete benötigt:

  • i965-va-driver

  • vainfo

Befehl zum Installieren der Pakete:

sudo apt-get install i965-va-driver vainfo 

Oder mit apturl installieren, Link: apt://i965-va-driver,vainfo

Unterstützung für VDPAU

Mittels der generischen API Bibliothek libvdpau-va-gl ist es auch auf Intel Grafikchipsätzen möglich, VDPAU zu nutzen. Intern baut diese auf VA API und OpenGL auf. Zur Verwendung müssen folgende Pakete installiert werden (ab Ubuntu 14.04 verfügbar):

  • libvdpau-va-gl1

  • i965-va-driver

  • vdpauinfo

Befehl zum Installieren der Pakete:

sudo apt-get install libvdpau-va-gl1 i965-va-driver vdpauinfo 

Oder mit apturl installieren, Link: apt://libvdpau-va-gl1,i965-va-driver,vdpauinfo

Um VDPAU-Unterstützung für ein einzelnes Programm zu aktivieren, muss das Programm mit einem speziellen Prefix gestartet werden. Für den Firefox Browser ist z.B. folgender Befehl zu verwenden:

VDPAU_DRIVER=va_gl firefox 

Möchte man VDPAU hingegen systemweit nutzen, so muss eine Umgebungsvariable gesetzt werden. Dann ist die Nutzung des Prefix beim Aufruf von einzelnen Programmen nicht notwendig und VDPAU steht generell allen Programmen zur Verfügung. Die Umgebungsvariable kann über folgenden Befehl gesetzt werden:

sudo sh -c "echo 'export VDPAU_DRIVER=va_gl' >> /etc/profile" 

Um diese Änderung wirksam zu machen, muss der Rechner anschließend neu gestartet werden.

Test

Test der Unterstützung für VA-API

Hat man die Bibliotheken für das VA-API installiert, so lässt sich im Terminal mit dem Befehl vainfo prüfen, ob die Hardwarebeschleunigung erkannt wird. Beispiel einer AMD/ATI Grafikarte mit xvba-va-driver:

vainfo 

libva: VA-API version 0.32.0
Xlib:  extension "XFree86-DRI" missing on display ":0".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/x86_64-linux-gnu/dri/fglrx_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA-API version: 0.32 (libva 1.0.15)
vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA-API - 0.7.8
vainfo: Supported profile and entrypoints
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD

Dieses Beispiel zeigt, dass die Unterstützung korrekt erkannt wurde und dass die verbaute Grafikkarte zwei Videoprofile beherrscht: H.264 High und VC1 Advanced. Konkret handelt es sich um ein Netbook mit einer ATI Radeon HD 4225 Grafikkarte. Hier sieht man auch gleich einen Nachteil von AMD/ATI Grafikprozessoren: diese beherrschen (im Gegensatz zu Nvidia) kein MPEG2-Decoding (notwendig bei Videos von DVD oder DVB-S/T/C).

Beispiel eines Intel Grafikprozessors (Intel HD 4400) mit i965-va-driver:

vainfo 

libva info: VA-API version 0.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.35 (libva 1.3.0)
vainfo: Driver version: Intel i965 driver - 1.3.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
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD

Test der Unterstützung für VDPAU

Das Programm vdpauinfo (im Terminal aufrufen) zeigt, welche Codecs die Grafikkarte unterstützt.

Beispiel einer NVidia-Grafikkarte mit libvdpau1:

vdpauinfo 

display: :0   screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library  304.88  Wed Mar
27 14:49:27 PDT 2013

Video surface:

name   width height types
-------------------------------------------
420     4096  4096  NV12 YV12
422     4096  4096  UYVY YUYV

Decoder capabilities:

name               level macbs width height
-------------------------------------------
MPEG1                 0  8192  2048  2048
MPEG2_SIMPLE          3  8192  2048  2048
MPEG2_MAIN            3  8192  2048  2048
H264_MAIN            41  8192  2048  2048
H264_HIGH            41  8192  2048  2048
VC1_SIMPLE            1  8190  2048  2048
VC1_MAIN              2  8190  2048  2048
VC1_ADVANCED          4  8190  2048  2048
MPEG4_PART2_SP        3  8192  2048  2048
MPEG4_PART2_ASP       5  8192  2048  2048
DIVX4_QMOBILE         0  8192  2048  2048
DIVX4_MOBILE          0  8192  2048  2048
DIVX4_HOME_THEATER    0  8192  2048  2048
DIVX4_HD_1080P        0  8192  2048  2048
DIVX5_QMOBILE         0  8192  2048  2048
DIVX5_MOBILE          0  8192  2048  2048
DIVX5_HOME_THEATER    0  8192  2048  2048
DIVX5_HD_1080P        0  8192  2048  2048

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         16384 16384    y  Y8U8V8A8 V8U8Y8A8
R10G10B10A2      16384 16384    y  Y8U8V8A8 V8U8Y8A8

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     y
INVERSE_TELECINE                 y
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         1     4096
VIDEO_SURFACE_HEIGHT             y         1     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 

Wird VDPAU auf einem Intel-System mit libvdpau-va-gl1 ohne systemweiter Aktivierung (sprich ohne gesetzter Umgebungsvariable) genutzt, so ist zu beachten, dass auch vdpauinfo mit dem Prefix gestartet werden muss:

VDPAU_DRIVER=va_gl vdpauinfo 

Ob die Bemühungen von Erfolg gekrönt waren, lässt sich sehr schön mit einem Youtube Testvideo 🇬🇧 prüfen. Zu beachten ist hierbei, dass die Videobeschleunigung den Codec H.264 unterstützen muss. Mit einem entsprechenden Programm lässt es sich in unterschiedlichen Auflösungen bis hin zu Full-HD herunterladen. Hat man in einem zweiten Fenster die Systemüberwachung geöffnet, kann man an der CPU-Auslastung sehen, wieviel die Videobeschleunigung leistet. Die Auslastung sollte bei Full-HD weniger als 10% betragen, wenn man einen moderner Rechner mit Mehrkernprozessor einsetzt. Eine Intel-Atom CPU erreicht deutlich höhere Auslastung und spielt Full-HD ohne Beschleunigung überhaupt nicht ab.

Alternativ zum Herunterladen des Videos lässt sich die Unterstüzung von VDPAU bei der Nutzung von Adobe Flash mit aktivierter Videobeschleunigung auch direkt auf Youtube über eine spezielle Informationsanzeige im Flashplayer prüfen. Siehe hierzu im entsprechenden Abschnitt im Adobe Flash Artikel.

Diese Revision wurde am 5. März 2018 10:10 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, System, Multimedia, DVD, Grafikkarten, ungetestet