ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Video-Dekodierung beschleunigen

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

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/movies.png Die Video-Dekodierung ist vor allem bei hochauflösenden Videos ein sehr rechenintensiver Prozess, bei dem schwache Prozessoren (z.B. in Netbooks oder Nettops) ü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 hat hier eine eigene Lösung:

Voraussetzungen

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

  1. Der Grafikchip muss Videobeschleunigung bieten

  2. Der zugehörige Grafiktreiber muss diese unterstützen (meist sind dies nur die proprietären Treiber der Hersteller)

  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 leider nur sehr stiefmütterlich behandelt, so dass der Benutzer hier meist selbst Hand anlegen und oft auch einige Programme selbst kompilieren muss. Deswegen richtet sich der Artikel hauptsächlich an fortgeschrittene Benutzer.

Die API von AMD/ATI (XvBA) entspricht ziemlich genau der 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 doppelten Entwicklungsaufwand vermieden und ermöglicht mit der Windowsversion zeitgleich auch eine Linuxversion 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 die VA API unterstützt (diese speziellen Bibliotheken, auch die weiter unten genannten, sind alle bei Splitted Desktop Systems {en} erhältlich). Dadurch hat man es im wesentlichen nur noch mit 2 APIs zu tun: VA API und VDPAU.

Leider werden diese Schnittstellen von Ubuntu, wie schon erwähnt, nur sehr schlecht unterstützt. Wenn überhaupt, ist in den Paketquellen nur Unterstützung für Intels VA API enthalten. Bei Installation der alternativen Bibliotheken von Splitted Desktop Systems kommt es häufig zu Versionskonflikten, so dass das Ganze in eine ziemliche Frickelei ausarten kann.

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 experimentelle Unterstützung für die VA API. Diese muss in den Einstellungen erst aktiviert werden. 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 mit VA API im VLC-Wiki {en}

XBMC

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 gute Anleitung zur Hardwarebeschleunigung {en} findet man im XBMC-Wiki {en}.

Für VDPAU lässt sich XBMC aus dem PPA des team-xbmc installieren. Eine Anleitung {en} findet sich im XBMC-Wiki {en}. Leider gibt es noch kein PPA für Ubuntu 11.04, man kann jedoch auch das PPA für Ubuntu 10.10 nehmen.

MPlayer

MPlayer bietet ebenfalls sehr gute Unterstützung für beide APIs an, jedoch muss auch dieser selbst kompiliert werden, da in den Standardpaketquellen 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 MPlayer ist frei konfigurierbar).

Flash-Plugin

Adobes Flash-Plugin bietet leider keine Unterstützung zur Videobeschleunigung an. Die Alternative gnash bietet Unterstützung für VA API, allerdings auch wieder nur, wenn man es selbst kompiliert.

Achtung!

gnash selbst kompilieren ist nur was für absolute Profis. Die Abhängigkeiten installieren einige Dutzend Pakete mit 660 MB auf die Platte. Dazu kommt dann noch der Quelltext mit knapp 200 MB. Die aktuelle Version (Stand: September 2011) lässt sich außerdem überhaupt nicht unter Ubuntu kompilieren. Dazu gibt es auf Launchpad einen Fehlerbericht.

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:

Benutzer@Rechner:~$ lspci -nnk | grep -i VGA -A2
01:05.0 VGA compatible controller [0300]: ATI Technologies Inc M880G [Mobility Radeon HD 4200] [1002:9712]
	Subsystem: Acer Incorporated [ALI] Device [1025:043d]
	Kernel driver in use: fglrx_pci

Jetzt muss nur noch in Erfahrung gebracht werden, ob die eingebaute Karte auch 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

Eine sehr gute Anleitung findet man im Forum {de} von Radeon3D {de}: Howto: AMD/ATI Hardware-Videobeschleunigung unter Ubuntu 11.04 64-Bit aktivieren {de}. Die Anleitung gilt gleichermaßen auch für 32-bit Systeme. Man lädt dann eben einfach nur die entsprechenden Bibliotheken für i386 (statt amd64) herunter. Mit Ubuntu 12.04 (Precise) werden die Bibliotheken von Splitted Desktop nicht mehr benötigt, sie sind in den Standard Paketquellen enthalten. Einfach das Paket xvba-va-driver installieren. Das Paket vainfo enthält das gleichnamige Kommando mit dem sich überprüfen lässt ob die Videobeschleunigung erkannt wird.

Grafiktreiber

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

API-Bibliotheken

Die erforderlichen Laufzeitbibliotheken befinden sich im Paket xvba-va-driver.

Videoplayer

Als Player kommen alle in Frage, die die VA API untersützen, entweder aus speziellen PPAs oder selbst kompiliert.

Systeme mit Nvidia Grafik

Siehe blog: Ubuntu – NVIDIA VDPAU + SMplayer {de} 08/2009

Grafiktreiber

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

API-Bibliotheken

Prinzipiell sollte es möglich sein, analog zur obigen Vorgehensweise für AMD/ATI, die libva1 auszutauschen und das VDPAU Backend vdpau-video von Splitted Desktop zu benutzen. Diese Vorgehensweise wurde jedoch im Rahmen dieses Artikels nicht getestet.

Alternativ (und wahrscheinlich auch die bessere Lösung) kann man auch einen Videoplayer mit direkter VDPAU-Unterstüzung installieren. Dazu werden folgende Bibliotheken benötigt [1]:

  • libvdpau1

  • vdpauinfo

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install libvdpau1 vdpauinfo 

sudo aptitude install libvdpau1 vdpauinfo 

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

Videoplayer

Je nachdem, für welche API-Lösung man sich entschieden hat, wird ein Player mit VA API- oder VDPAU-Unterstützung benötigt. Bevorzugte Methode ist VDPAU, da dies in den heutigen Ubuntu-Systemen direkt aus den Paketquellen unterstützt wird. XBMC unterstützt vdpau direkt ohne weitere Einstellungen. Beim GNOME MPlayer muss als Videoausgabe "vdpau" eingestellt und ein Häkchen bei "Enable Video Hardware Support" gesetzt werden.

Systeme mit Intel Grafik

Grafiktreiber

Bisher liegen keine Erfahrungen vor.

API-Bibliotheken

Bisher liegen keine Erfahrungen vor.

Videoplayer

Bisher liegen keine Erfahrungen vor.

Test

Hat man die Bibliotheken für die VA API installiert, so lässt sich im Terminal mit dem Befehl vainfo prüfen, ob die Hardwarebeschleunigung erkannt wird. Das sieht dann z.B. so aus:

Benutzer@Rechner:~$ vainfo
libva: libva version 0.32.0-sds2
Xlib:  extension "XFree86-DRI" missing on display ":0.0".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/fglrx_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.32
vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA-API - 0.8.0
vainfo: Supported profile and entrypoints
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD

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

Ob die Bemühungen von Erfolg gekrönt waren, lässt sich sehr schön mit diesem Youtube Testvideo prüfen. Mit einem entsprechenden Downloadhelper lässt es sich in unterschiedlichen Auflösungen, bis hin zu Full-HD, herunterladen. Hat man in einem zweiten Fenster die Systemüberwachung offen, 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 hat weit mehr Auslastung und spielt Full-HD ohne Beschleunigung überhaupt nicht ab.

Problembehandlung

Das Paket libva von Splitted Desktop Systems enthält eine Bibliothek, die eigentlich in das Paket libva-x11 gehört. Dies führt zu einer Kollision mit den Standardpaketquellen, die verhindert, dass libva-x11 installiert werden kann. Das wiederum führt dazu, dass sich Pakete nicht installieren lassen, die von libva-x11 abhängig sind. Dazu zählt auch der VLC Player. Im Forum gibt es dazu eine entsprechende Diskussion.

ubuntuusers.local › WikiVideo-Dekodierung beschleunigen