[[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Programme_kompilieren: Programme kompilieren] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/movies.png, 48, align=left)]] 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 ([wikipedia:DirectX:]), gibt es unter Linux gleich drei, denn jeder der großen Grafikkarten-Hersteller bietet hier eine eigene Lösung: * Intel: [wikipedia_en:Video_Acceleration_API:VA-API] * Nvidia: [wikipedia:Video_Decode_and_Presentation_API_for_Unix:VDPAU] * AMD/ATI: [wikipedia:Video_Decode_and_Presentation_API_for_Unix:VDPAU], seit Ubuntu 14.04 über den [:Grafikkarten/AMD/radeon:radeon]-Treiber 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 ''VA-API'' 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. 1. 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) 1. Es muss eine passende Bibliothek für die verwendete API installiert sein 1. 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 [:Paketquellen_freischalten/PPA: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 Aktualisierungen 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 zwei 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 [:VLC: VLC-Player] bietet eine Unterstützung für die installierten APIs, standardmäßig wird diese automatisch ausgewählt. Die Unterstützung der APIs ist jedoch sehr eingeschränkt, denn aufgrund der Philosophie von VLC, dass Videos als Datenstrom versendet (streaming) und zu jedem beliebigen Ziel umgeleitet werden können, muss VLC die Daten nach der Dekodierung 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, doch wird diese wenn verfügbar und auf "automatisch" gestellt aktiviert, von daher ist davon auszugehen, dass sie durchaus etwas sinnvoll ist. VLC unterstützt die VA-API und VDPAU. Siehe auch [https://wiki.videolan.org/VLC_GPU_Decoding VLC GPU Dekodierung im VLC-Wiki] {en} == 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. Für VDPAU lässt sich Kodi aus dem PPA des [lpuser:team-xbmc:] installieren. 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 Abspielprogramm für die Kommandozeile, für den es Zusätze zur grafischen Bedienung gibt (z.B. [:MPlayer#GNOME-MPlayer: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 [launchpad:~sander-vangrieken/+archive/vaapi:PPA] von [lpuser:sander-vangrieken:Sander van Grieken] installiert werden. Bei der Verwendung des [:MPlayer#GNOME-MPlayer: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. == Browser == Unter [:Firefox:] ist seit Version 76 Integration für Hardwarebeschleunigung eingebaut worden, auch [:Chromium:] hat diese Funktion, allerdings gibt es hier für höhere Auflösungen Codecprobleme, denn es wird bei den meisten Websites standardmäßig der VP-9-Codec verwendet, welcher bei den meisten Grafikkarten keine Hardwarebeschleunigung möglich macht. Mit Addons kann man teilweise die Verwendung des H.264-Codecs erzwingen, welcher meistens hardwarebeschleunigt werden kann, allerdings funktioniert dieser bei den meisten Plattformen nur bis zu einer Auflösung von 1920x1080, theoretisch ginge mehr, wird wohl aber nicht unterstützt. = 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: {{{#!vorlage Befehl 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:VDPAU#Nvidia:Wikipedia] und für Intel-Grafik findet man eine Übersicht in der [wikipedia_en:Video_Acceleration_API#Overview:englischen Wikipedia]. = Installation = == Systeme mit AMD/ATI-Grafik == === Grafiktreiber === Der freie [:Grafikkarten/AMD/radeon: radeon]-Treiber, der in den offiziellen Paketquellen vorhanden ist, bietet seit Kernel 3.13 (also seit Ubuntu 14.04) eine Videobeschleunigung. === Unterstützung für vdpau-radeon-Treiber === {{{#!vorlage Paketinstallation mesa-vdpau-drivers libvdpau1 vdpauinfo }}} === Unterstützung für VA-API-radeon-Treiber === {{{#!vorlage Paketinstallation mesa-va-drivers vainfo }}} == Systeme mit Nvidia-Grafik == === Grafiktreiber === Als Treiber für die Grafikkarte kommt nur der proprietäre [:Grafikkarten/Nvidia/nvidia:nvidia] in Frage. Der freie [:Grafikkarten/Nvidia/nouveau:nouveau]-Treiber bietet keine Videobeschleunigung an. === Unterstützung für VDPAU === Für die VDPAU-Unterstüzung werden folgende Bibliotheken benötigt [1]: {{{#!vorlage Paketinstallation 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. Das Paket ist aber nur bis Ubuntu 18.04 LTS verfügbar und wurde danach aus den Quellen entfernt. {{{#!vorlage Paketinstallation vdpau-va-driver, VDPAU-basiertes Backend für VA-API, bis Ubuntu 18.04 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: {{{#!vorlage Paketinstallation i965-va-driver vainfo }}} === Unterstützung für VDPAU === Mittels der generischen API-Bibliothek [github:i-rinat/libvdpau-va-gl:libvdpau-va-gl] ist es auch auf Intel Grafikchipsätzen möglich, VDPAU zu nutzen. Intern baut diese auf VA-API und [wikipedia:OpenGL:] auf. Zur Verwendung müssen folgende Pakete installiert werden: {{{#!vorlage Paketinstallation 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:Firefox Browser] ist z.B. folgender Befehl zu verwenden: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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''': {{{#!vorlage Befehl 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) keine MPEG2-Dekodierung (notwendig bei Videos von DVD oder DVB-S/T/C). Beispiel eines Intel-Grafikprozessors (Intel HD 4400) mit '''i965-va-driver''': {{{#!vorlage Befehl 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 }}} Ausgabe, wenn VA-API nicht aktiv ist (am Beispiel einer NVIDIA-Karte mit fehlendem Backend): {{{ libva info: VA-API version 1.7.0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so libva info: va_openDriver() returns -1 vaInitialize failed with error code -1 (unknown libva error),exit }}} == 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`: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl VDPAU_DRIVER=va_gl vdpauinfo }}} Ob die Bemühungen von Erfolg gekrönt waren, lässt sich sehr schön mit einem [youtube:_iRPWD6imV8:Youtube Testvideo] {en} prüfen. Zu beachten ist hierbei, dass die Videobeschleunigung den Codec H.264 unterstützen muss. Mit einem entsprechenden [:Streams_speichern: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. = Links = * [:Grafikkarten:] {Übersicht} Übersichtsartikel * [archwiki:Hardware_video_acceleration:] - Hardware-Videobeschleunigung im ArchWiki #tag: Hardware, System, Multimedia, DVD, Grafikkarten