Ubuntu 16.10 Yakkety Yak
Ubuntu 16.04 Xenial Xerus
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
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.
Damit Videobeschleunigung durch die Hardware genutzt werden kann, müssen mehrere Bedingungen erfüllt sein:
Der Grafikchip muss eine Videobeschleunigung bieten
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)
Es muss eine passende Bibliothek für die verwendete API installiert sein
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.
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 (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 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 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. Ein Problem ist, dass Mpv erst ab Ubuntu 14.04 in den offiziellen Paketquellen enthalten ist und somit für Ubuntu 12.04 nicht zur Verfügung steht.
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.
Unter Ubuntu 12.04 funktionierte dies allerdings nicht (siehe Fehlerbericht), der Fehler ist aber inzwischen behoben.
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.
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.
Als Treiber für die Grafikkarte kommt der proprietäre fglrx (bis einschließlich) 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.
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
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xvba-va-driver vainfo
sudo aptitude install xvba-va-driver vainfo
Als Treiber für die Grafikkarte kommt nur der proprietäre nvidia in Frage. Der freie nouveau-Treiber bietet keine Videobeschleunigung an.
Für die VDPAU-Unterstüzung werden folgende Bibliotheken benötigt [1]:
libvdpau1
vdpauinfo
mit apturl
Paketliste zum Kopieren:
sudo apt-get install libvdpau1 vdpauinfo
sudo aptitude install libvdpau1 vdpauinfo
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
mit apturl
Paketliste zum Kopieren:
sudo apt-get install vdpau-va-driver vainfo
sudo aptitude install vdpau-va-driver vainfo
Der native, standardmäßig verwendete Linux-Treiber ermöglicht grundsätzlich Videobeschleunigung.
Für die Unterstützung der VA API auf Intel Grafikchipsätzen werden folgende Pakete benötigt:
i965-va-driver
vainfo
mit apturl
Paketliste zum Kopieren:
sudo apt-get install i965-va-driver vainfo
sudo aptitude install i965-va-driver vainfo
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
mit apturl
Paketliste zum Kopieren:
sudo apt-get install libvdpau-va-gl1 i965-va-driver vdpauinfo
sudo aptitude install 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.
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
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.
Grafikkarten Übersichtsartikel
Hardware_video_acceleration - Hardware Videobeschleunigung im ArchWiki
Diese Revision wurde am 16. Januar 2017 14:14 von noisefloor erstellt.