Die Grafikkarte zum Dekodieren von Videos unter Firefox mit VA-API nutzen

Aus LinuxUser 10/2020

Die Grafikkarte zum Dekodieren von Videos unter Firefox mit VA-API nutzen

© kvsan, 123RF

Volles Potenzial

Mit der Videodekodierung mittels via GPU schließt Firefox unter Linux nun zu Microsoft Windows auf. Noch traut sich Mozilla jedoch nicht, die Funktion von Haus aus zu aktivieren.

Schon seit Längerem enthalten Grafikkarten dedizierte Komponenten zum De- und Enkodieren von Videoformaten wie MPEG2, H.264 und H.265. Im Jargon der Chipentwickler nennen sich solche in den Chipsatz eingebettete Einheiten ASIC [1].

CPUs ohne solche ASICs tun sich mit dem dekodieren von Videos schwer. Die Grafikkarten mit ihren spezialisierten Schaltkreisen schaffen das selbst auf schmalbrüstigen Systemen wie etwa dem Raspberry Pi ohne Ruckeln und mit geringerer Energieaufnahme, womit sie den Hauptprozessor entlasten. Der geringere Energieverbrauch sorgt für längere Laufzeiten im Batteriebetrieb und weniger Wärmeentwicklung, sodass das System leiser arbeitet.

Schnittstelle

Unter Linux greifen Programme über die Video-Acceleration-API (VA-API) [2] auf die Beschleunigungsfunktionen des Grafikchips zu. Das Werkzeug Vainfo (enthalten im Paket vainfo oder libva-utils) zeigt Ihnen die von der Grafikkarte unterstützten Algorithmen an. Die Endung VLD kennzeichnet dabei die Dekodierungsfähigkeit, EncSlice die Enkodierungsfähigkeit.

Die integrierte Intel HD Graphics 5500 der Intel-CPU i7 5600U (“Broadwell”) unterstützt zum Beispiel das De- und Enkodieren von MPEG2 und H264, nicht aber von VP9 (Listing 1). Die achte Generation der Intel-CPUs (“Coffee Lake”), etwa ein i7-9700 mit UHD Graphics 630, kann dagegen bereits VP9 de- und enkodieren (Listing 2). Eine ältere AMD-Grafikkarte beschleunigt nur das Dekodieren von H.264. Mit VP8 und VP9 kommt diese GPU noch nicht zurecht (Listing 3).

Listing 1

$ vainfo
[...]
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.2.0 ()
vainfo: Supported profile and entrypoints
[...]
    VAProfileMPEG2Simple            : VAEntrypointVLD
    VAProfileMPEG2Simple            : VAEntrypointEncSlice
[...]
    VAProfileH264Main               : VAEntrypointVLD
    VAProfileH264Main               : VAEntrypointEncSlice
    VAProfileH264Main               : VAEntrypointFEI
[...]
    VAProfileVP8Version0_3          : VAEntrypointVLD

Listing 2

$ vainfo
libva info: VA-API version 1.3.0
[...]
vainfo: Driver version: Intel i965 driver for Intel(R) Coffee Lake - 2.3.0.pre1 (2.3.0.pre1)
[...]
    VAProfileVP9Profile0            : VAEntrypointVLD
    VAProfileVP9Profile0            : VAEntrypointEncSlice
    VAProfileVP9Profile2            : VAEntrypointVLD

Listing 3

$ vainfo
[...]
vainfo: Driver version: Mesa Gallium driver 20.0.1 for AMD OLAND (DRM 3.39.0, 5.8.0.mx64.339-13250-g66bc99e8bbd14, LLVM 9.0.1)
    VAProfileMPEG2Simple            : VAEntrypointVLD
    VAProfileMPEG2Main              : VAEntrypointVLD
    VAProfileVC1Simple              : VAEntrypointVLD
    VAProfileVC1Main                : VAEntrypointVLD
    VAProfileVC1Advanced            : VAEntrypointVLD
    VAProfileH264ConstrainedBaseline: VAEntrypointVLD
    VAProfileH264Main               : VAEntrypointVLD
    VAProfileH264High               : VAEntrypointVLD
    VAProfileNone                   : VAEntrypointVideoProc

Allerdings stehen nicht alle benötigten Software-Komponenten unter einer freien Lizenz, sodass Nutzer die VA-API-Unterstützung unter zum Beispiel Ubuntu oder Debian für Intel-Chips ab der fünften Generation (“Broadwell”) erst durch die Installation des Pakets intel-media-va-driver-non-free aus den Paketquellen aktivieren müssen.

Mit dem Mediaplayer mpv überprüfen Sie dann, ob die Grafikkarte beim Dekodieren zum Einsatz kommt. Dazu rufen Sie den Player mit dem Schalter --hwdec=vaapi auf. Sobald das Programm bei der Wiedergabe eines Videos VO: [...] vaapi meldet, funktioniert die Schnittstelle (Listing 4). Durch Integration des dedizierten Decoder-Chips sinkt dann der Energieverbrauch des gesamten Systems. Powertop meldet zum Beispiel nur noch 6,32 Watt (Abbildung 1) statt vorher 7,87 Watt (Abbildung 2).

Listing 4

$ mpv --hwdec=vaapi /Pfad/zu/video.mkv
[...]
VO: [gpu] 1920x1080 vaapi[nv12]
VO: [gpu] 1920x1080 yuv420p
[...]

Abbildung 1: Mit den Optionen <code>--vo=gpu --hwdec=vaapi</code> gestartet, greift der Medienplayer MPV auf die spezialisierten Decoder-Chips der Grafikkarte zur&uuml;ck.

Abbildung 1: Mit den Optionen --vo=gpu --hwdec=vaapi gestartet, greift der Medienplayer MPV auf die spezialisierten Decoder-Chips der Grafikkarte zurück.


Abbildung 2: Der Energieverbrauch des Systems sinkt bei aktiviertem VA-API merklich. Ohne die Optimierung zieht das System 1,5&nbsp;Watt mehr aus dem Akku.

Abbildung 2: Der Energieverbrauch des Systems sinkt bei aktiviertem VA-API merklich. Ohne die Optimierung zieht das System 1,5 Watt mehr aus dem Akku.

Webbrowser

Viele Internet-Auftritte – nicht zuletzt Youtube – binden heute Videos ein, sodass Webbrowser oft auch als Videoabspielprogramme fungieren. Nutzer profitieren somit besonders, wenn der Browser beim Dekodieren auf die Chips der Grafikkarte zurückgreifen kann. Mit dem Compositor WebRender [3] legte Mozilla die Grundlage dafür, die Grafikkarte zur Darstellungen von Webseiten zu nutzen. WebRender erlaubt neben dem GL-Compositor die Nutzung der Hardware-Beschleunigung. Aber selbst der aktuelle Firefox 80 aktiviert die Funktion standardmäßig nur für Windows 10 [4]. Für Linux bemäkeln die Entwickler, es gebe zu viele Probleme mit den Grafikkartentreibern.

Wie so oft bringt auch in dieser Situation wieder ein Red-Hat-Entwickler den Linux-Desktop voran. Martin Stransky programmierte die entsprechenden Änderungen für Firefox, ab Fedora 31 sind sie in Firefox 77.0 eingepflegt. In seinem Blog-Eintrag [5] berichtet Stransky, dass dank Wayland mittlerweile viele Fehler in den Linux-Grafikkartentreibern entdeckt und behoben wurden, da Wayland die Beschleunigungsfunktionen intensiv nutzt. Für das Hardware-beschleunigte De- und Enkodieren greift der Entwickler auf das bewährte Ffmpeg [6] zurück, dem Firefox via DMA-Buf das Material direkt in den Grafikkartenspeicher schreibt und somit das Kopieren der Daten erspart. Standardmäßig sind die Funktionen deaktiviert.

Bei einer Wayland-Desktop-Umgebung aktiviert der Aufruf von MOZ_ENABLE_WAYLAND=1 MOZ_WEBRENDER=1 firefox aus dem Terminal heraus WebRender und somit auch die VA-API-Schnittstelle – nach entsprechender Konfiguration. Listing 5 zeigt den Aufruf des Browsers mit VA-API in einer X11-Umgebung, was Firefox seit Version 80 unterstützt. Die Variable MOZ_LOG steuert die ausgegebenen Meldungen.

Listing 5

$ MOZ_X11_EGL=1 MOZ_WEBRENDER=1 MOZ_LOG="PlatformDecoderModule:5" firefox
[...]
[Child 19296: MediaPDecoder #3]: D/PlatformDecoderModule Choosing FFmpeg pixel format for VA-API video decoding.
[Child 19296: MediaPDecoder #3]: D/PlatformDecoderModule Requesting pixel format VAAPI_VLD
[h264 @ 0x7f01f5720000] Format vaapi_vld chosen by get_format().
[h264 @ 0x7f01f5720000] Format vaapi_vld requires hwaccel initialisation.
[h264 @ 0x7f01f5720000] Considering format 0x3231564e -> nv12.
[h264 @ 0x7f01f5720000] Picked nv12 (0x3231564e) as best match for yuv420p.
[...]

Anschließend öffnen Sie mit der Pseudo-URL http://about:config den Konfigurationseditor und aktivieren die VA-API-Unterstützung, indem Sie den Schlüssel media.ffmpeg.vaapi.enabled per Doppelklick von false auf true umstellen. Ob WebRender funktioniert, kontrollieren Sie über die URL http://about:support im Abschnitt Grafik. Hier sollte Firefox Informationen zu WebRender ausgeben.

Aktuell liefert Youtube aufgrund der geringeren Größe bei gleicher Qualität standardmäßig VP9-kodierte Filme aus. Für die Hardware-Beschleunigte VP8/VP9-Wiedergabe in Firefox darf man nicht die von Firefox mitgelieferte Bibliothek Ffvpx laden, da sie die VA-API-Schnittstelle nicht benutzen kann. Mit dem in http://about:config auf false gesetzten Schlüssel media.ffvpx.enabled nutzt Firefox die FFmpeg-Bibliotheken des Systems [7]. Manche Distributionen konfigurieren Firefox bereits entsprechend.

Bei fehlender Unterstützung in der Grafikkarte, die aber H.264 unterstützt, sorgen die Firefox-Erweiterungen H264ify [8] oder Enhanced-H264ify [9] dafür, die mit VP8 und VP9 kodierten Formate zu blockieren. Finden Sie in den Protokollen Meldungen wie D/PlatformDecoderModule DMA-Buf/VA-API can’t be used, WebRender/DMA-Buf is disabled, dann überprüfen Sie bitte noch einmal die Einstellungen.

Vorgehen bei Problemen

Kommt es beim Abspielen von Videos zu Problemen, empfiehlt es sich, zunächst zu prüfen, ob die Fehler auch noch in der täglich aus den letzten Änderungen gebauten Nightly-Version des Browsers auftreten. Falls sich die Fehler bestätigen, dann können Sie zur Entwicklung beitragen, indem Sie das Problem an den Bugtracker von Mozilla berichten [10] und die Ausgaben von MOZ_LOG="PlatformDecoderModule:5" anhängen.

Den aktuellen Nightly-Build [11] für Linux laden Sie wie in Listing 6 gezeigt auf Ihren Rechner herunter und entpacken das Archiv; das letzte Kommando startet den Browser. Achten Sie darauf, dass Sie zuvor die reguläre Firefox-Instanz vollständig beenden. Nach dem Ende der Tests können Sie das beim Auspacken erstellte Verzeichnis firefox/ wieder löschen.

Listing 6

### 64-Bit-Version herunterladen:
$ wget 'https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux64&lang=de' -O firefox-nightly64.tar.bz2
### 32-Bit-Version herunterladen:
$ wget 'https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux&lang=de' -O firefox-nightly32.tar.bz2
### Entpacken und aufrufen:
$ tar xf firefox-nightly*.tar.bz2
$ firefox/firefox

Ausblick

Ob der Energieverbrauch beim Abspielen von Videos mithilfe von VA-API nun sinkt, lässt sich mit dem Werkzeug Turbostat ermitteln (siehe Kasten “Verbrauchsanzeige”). Die Tabelle “Energieverbrauch” zeigt die gemittelten Werte beim Abspielen eines Videos über den Mediaplayer MPV sowie in Firefox auf einem Dell Latitude E7250 mit “Broadwell”-Chipsatz (Intel Core i5 5300U). Während MPV ganz offensichtlich vom optimierten Decoder-Chip profitiert, fällt die Ersparnis bei Firefox mit WebRender etwas geringer aus. Powertop meldet mit VA-API eine Entladungsrate von 7,60 Watt (Abbildung 3); ohne zieht das System beim Abspielen des Videos über den Browser 8,56 Watt aus dem Akku des Notebooks (Abbildung 4).

Verbrauchsanzeige

Turbostat ist Teil des Linux-Kernels und unter Debian im Paket linux-cpupower eingebaut. Andere Distributionen, wie etwa Arch Linux, lagern das Programm in das eigenständige Paket turbostat aus. Die Anwendung liest die vom Computersystem gelieferten Statistiken zum Energieverbrauch aus. Das Kommando in Listing 7 zeigt im Intervall von drei Sekunden die Werte der Leistungsaufnahme an. PkgWatt steht für Package – quasi den Chipsatz –, CorWatt für den Prozessor. GFXWatt meint die Grafikkarte und RAMWatt den Arbeitsspeicher. Mit [Strg]+[C] beenden Sie Turbostat und kehren zum Prompt zurück.

Listing 7

$ turbostat --quiet -i 3 -s 'PkgWatt,CorWatt,GFXWatt,RAMWatt'
PkgWatt CorWatt GFXWatt RAMWatt
4.21    1.55    0.13    1.02
4.21    1.55    0.13    1.02
[...]

Test

PkgWatt

CorWatt

GFXWatt

PowerTOP [W]

MPV (hwdec=no)

4,08

1,72

0,15

7,87

MPV (hwdec=vaapi)

2,78

0,74

0,09

6,32

Nightly (plain)

5,20

3,15

0,04

8,56

Nightly (VA-API)

3,73

1,45

0,12

7,60

Abbildung 3: Auch der Webbrowser Firefox kann auf Hardware-Beschleunigung zur&uuml;ckgreifen. Die Unterst&uuml;tzung der Funktion ist unter Linux allerdings noch nicht Standard.

Abbildung 3: Auch der Webbrowser Firefox kann auf Hardware-Beschleunigung zurückgreifen. Die Unterstützung der Funktion ist unter Linux allerdings noch nicht Standard.


Abbildung 4: Ohne VA-API zieht das System beim Abspielen des Videos im aktuellen Nightly-Build des Firefox-Browsers knapp 1&nbsp;Watt mehr aus dem Akku des Laptops.

Abbildung 4: Ohne VA-API zieht das System beim Abspielen des Videos im aktuellen Nightly-Build des Firefox-Browsers knapp 1 Watt mehr aus dem Akku des Laptops.

Dank des Engagements von Red Hat wird Firefox unter Linux bald standardmäßig die Grafikkarte zum Dekodieren von Videos verwenden und zieht damit im Funktionsumfang endlich mit der Version für Microsoft Windows 10 gleich. Damit steht zumindest dieses Detail dem Jahr des Linux-Desktops nicht mehr im Weg – wenn es denn einmal kommen sollte.

Auch für Videokonferenzen gewinnt der Browser immer mehr an Bedeutung, sodass neben dem Dekodieren der empfangenen Videodaten auch das Enkodieren von Videos (des eigenen Bilds) wichtig wird. Viele Bildströme sind mit VP8 kodiert, das viele Grafikkarten unterstützen. Firefox 80 oder 81 kann nach dem Aktivieren von media.ffmpeg.low-latency.enabled in http://about:config VA-API für WebRTC nutzen [12]. Nach dem Test der VA-API-Integration aktiviert Firefox diese hoffentlich bald in der Standardeinstellung, sodass die Optimierung ohne Handarbeit funktioniert. 

Glossar

ASIC

Application-specific Integrated Circuit, anwendungsspezifische integrierte Schaltung.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 10/2020 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben