WebRTC und ChromeCast: H264 oder HEVC erzwingen

Photon

Rear Admiral Pro
🎅Rätsel-Elite ’24
Registriert
Apr. 2006
Beiträge
5.623
Hallo Community,

ich nutze meinen Laptop (Thinkpad L13 Yoga Gen 2 mit Intel Core i5-1135G7 und dessen integrierter Iris Xe Grafik) häufig für Video-Calls mit Jitsi sowie Bildschirm-Übertragung via ChromeCast.

In beiden Fällen muss der Webbrowser Video-Encoding betreiben und er scheint dafür die CPU zu verwenden, da die Iris Xe Grafik nur wenige Codecs in Hardware encodieren kann. Die CPU-Last ist dann hoch, die Temperaturen auch.

Soweit ich es überblicke, kann die GPU nur H264 und HEVC encodieren, aber nicht VP8, VP9 und AV1. Ich suche nun nach einer Möglichkeit, dem Webbrowser (fürs ChromeCast nutze ich Chromium, für Jitsi vorzugsweise Firefox, kann aber auf Chromium wechseln, wenn es nicht anders geht) zu sagen, dass beim Video-Encoding als Video-Codec einer der beiden von der GPU unterstützten Codecs genutzt werden soll.

Ich habe schon die KI gefragt und habe für den Firefox die Flags media.peerconnection.video.vp8_enabled (und analog für vp9 und av1) empfohlen bekommen. Aber sie auf "false" zu setzen hat keinen Effekt gehabt.

Bei Chromium war unter chrome://gpu ursprünglich die Hardware-Beschleunigung für Video-Encoding gar nicht verfügbar. Dank einiger Start-Optionen (nämlich "--ignore-gpu-blocklist --enable-features=AcceleratedVideoEncoder,VaapiVideoDecoder --ozone-platform=x11") steht dort nun, dass die Hardware-Beschleunigung verfügbar ist, aber Jitsi nutzt weiterhin den AV1-Codec, sodass es doch von der CPU erledigt werden muss. Den ChromeCast habe ich mit den Start-Optionen noch nicht testen können, liefere das Testergebnis voraussichtlich am Montag nach.

Hat vielleicht jemand Tipps, wie ich die von der GPU nicht unterstützten Codecs fürs Video-Encoding "sperren" kann, sodass H264 oder HEVC verwendet wird?

Danke für alle Tipps!
Photon
 
Nur der Vollständigkeit halber, welcher ChromeCast wird verwendet? Nicht alle können alle VideoCodecs.
 
edit: Musste leider vorhin schnell antworten, hier nochmal ausführlicher:

@NameHere: Sorry, vergessen zu erwähnen, dass unter Linux via VA-API nur diese beiden Codecs (H264 und HEVC) fürs Encoding unterstützt werden (das Decoding funktioniert super auch mit den anderen Codecs, aber mir geht es ja ums Encoding). Flags im Browser gesetzt, wie von der KI vorgeschlagen (siehe auch den Eingangspost).

@Mojo1987: Ich nutze für den Verbindungsaufbau Chromiums "Streamen"-Feature, am anderen Ende ist ein Legamaster AirServer Connect 3.
 
Zuletzt bearbeitet:
Noch ein Update:

Ich habe nun VP9 Video-Encoding im Grafiktreiber aktivieren können (mit der Boot-Option i915.enable_guc=2, wenn es jemanden interessiert). Ich habe auch mit ffmpeg erfolgreich ein Test-Video auf der GPU encoden können. Außerdem habe ich in Firefox mithilfe von Flags in about:config erreichen können, dass Jitsi VP9 nutzt.

Das Blöde ist nur, dass Firefox offenbar weiterhin das Video-Encoding auf der CPU durchführt, weil die CPU-Last hoch ist und laut intel_gpu_top die GPU-Last fürs Video-Encoding auf Null ist.

Und bei Chromium habe ich zwar #cast-streaming-hardware-vp9 und #enable-cast-streaming-vp9 aktiviert, und #cast-streaming-hardware-av1 und #enable-cast-streaming-av1 deaktiviert, Jitsi nutzte aber AV1 (natürlich auf der CPU, weil die GPU AV1 fürs Encoding nicht mal in Hardware unterstützt).
 
Noch ein Update: Offenbar kann Firefox unter Linux grundsätzlich noch kein Hardware Video Encoding, also muss ich mich auf Chromium konzentrieren. Hier konnte ich verifizieren, dass WebRTC bei VP9 tatsächlich Hardware Video Encoding nutzt, nur bringe ich Jitsi anders als bei Firefox ums Verrecken nicht, VP9 als Codec zu nutzen, es bleibt immer bei AV1...
 
Naja für Jitsi muss das auf dem Server auch aktiviert und konfiguriert sein. Aber da es in FF ja geht wird das der Fall sein. Standard ist allerdings AV1 da.

Kannst du im Chrome mal den Mobile Mode forcieren? Ich glaub in der Default Conf gibts kein AV1 für die Mobile Devices in Jitsi, zumindest wenn man sich die Doc anschaut :D
 
Intetressante Idee, aber ich habe gerade getestet und es wird leider trotzdem AV1 verwendet, die Emulation betrifft also wohl nicht die WebRTC-Protokolle...
 
Zurück
Oben