VP9 Skalierbare Videocodierung für geroutete Sitzungen

Über VP9-Unterstützung für Scalable Video Coding (SVC) in gerouteten Sitzungen

VP9-Übersicht

VP9 ist ein offenes und lizenzfreies Videocodierungsformat, das von Google entwickelt wurde. Es dient als Nachfolger von VP8 und bietet eine höhere Komprimierungseffizienz. Dieses bedeutet, dass VP9 Videos in höherer Qualität mit der gleichen Bitrate wie VP8 kodieren kann, obwohl allerdings mehr Rechenleistung erfordert.

Weitere Informationen finden Sie in der Video-Codecs Leitfaden für Entwickler.

Skalierbare Videokodierung (SVC)

Einer der Hauptvorteile von VP9 ist seine Unterstützung für Skalierbare Videokodierung (SVC). Mit SVC kann ein einzelner Videostream mehrere räumliche und zeitliche Qualitäten enthalten. Dies ermöglicht es einer SFU (Selective Forwarding Unit), wie beispielsweise der Vonage Video-Media-Router, um jedem Client, der einen SVC-fähigen Publisher abonniert hat, unterschiedliche Auflösungen und Bildraten zu übermitteln. Dies ist effizienter als Simultanübertragung, wobei der Anbieter mehrere Videostreams in unterschiedlichen Auflösungen überträgt, wie es üblicherweise bei VP8 der Fall ist.

Skalierbarkeitsmodus

Der Skalierbarkeitsmodus in SVC legt die Anzahl und die Arten der räumlichen und zeitlichen Ebenen in einem SVC-Stream sowie die Abhängigkeiten zwischen ihnen fest. Weitere Einzelheiten finden Sie in der W3C WebRTC SVC Spezifikation. Der Skalierbarkeitsmodus wird für einen Publisher festgelegt, und der Vonage Video Media Router sorgt dafür, dass der geeignete Stream aus den verfügbaren Streams an den Teilnehmer weitergeleitet wird.

Bei der Veröffentlichung eines Kamerastreams unterstützt die Vonage Video API die Formate L1T3, L2T3 und L3T3 Skalierbarkeitsmodi (drei zeitliche Ebenen mit einer variablen Anzahl von räumlichen Ebenen) sowohl für Web- als auch für native Clients.

Bitte beachten Sie, dass die Anzahl der räumlichen Ebenen automatisch auf der Grundlage der Auflösung des Kamerastreams und der geschätzten Bandbreite zwischen dem Publisher und dem Vonage Video Media Router angepasst wird. Bei ausreichender Bandbreite betragen die räumlichen Ebenen für FHD 1920 x 1080, 960 x 540 und 480 x 270 Pixel. Für HD betragen sie 1280 × 720, 640 × 360 und 320 × 180. Für SD gibt es nur zwei räumliche Ebenen: 720 × 480 und 360 × 240. Entsprechend betragen die Bildraten 30 FPS für die höchste zeitliche Ebene, 15 FPS für die mittlere zeitliche Ebene und 7,5 FPS für die niedrigste zeitliche Ebene.

Sowohl für Web- als auch für native Clients wird bei der Veröffentlichung eines Bildschirmfreigabestreams der Skalierbarkeitsmodus durch eine Option festgelegt, die während der Veröffentlichung ausgewählt wird (weitere Details finden Sie in der Skalierbare Video-Seite. Ist diese Option deaktiviert, verwendet der Stream den L1T1-Modus, der eine einzige räumliche und zeitliche Ebene bietet (keine Skalierbarkeit). Ist die Option jedoch aktiviert, wählt das System dynamisch zwischen L1T1, L2T1 oder L3T1 aus, basierend auf der geschätzten Bandbreite zwischen dem Publisher und dem Vonage Video Media Router sowie der Auflösung des Bildschirmfreigabestreams.

Simulcast (verwendet in VP8) vs. SVC (verwendet in VP9)

Beim Simulcast (in Verbindung mit VP8) sendet der Anbieter mehrere unabhängige Videostreams, die jeweils aus unterschiedlichen zeitlichen Ebenen mit variierenden Auflösungen und Bitraten bestehen, an den Medienserver. Diese kodierten zeitlichen Ebenen innerhalb mehrerer Streams ermöglichen es dem Server, je nach Netzwerkbedingungen dynamisch den am besten geeigneten Stream und die am besten geeignete Ebene für jeden Abonnenten auszuwählen. Diese Methode steigert zwar die Effizienz durch die Anpassung der Videoqualität in Echtzeit, erfordert jedoch, dass der Anbieter mehrere Versionen desselben Streams codiert (was die CPU-Auslastung erhöht) und überträgt (was die Netzwerkauslastung erhöht), um unterschiedlichen Bedingungen gerecht zu werden.

Im Gegensatz dazu bündelt SVC (Scalable Video Coding), wie es in VP9 unterstützt wird, mehrere räumliche und zeitliche Qualitäten in einem einzigen Stream. Der Medienserver kann dann die entsprechende Ebene extrahieren und an jeden Abonnenten weiterleiten, ohne dass der Herausgeber mehrere Streams senden muss. Dadurch ist SVC bandbreiteneffizienter und verbessert die Effizienz der Arbeitslast des Herausgebers im Vergleich zum Simulcast.

Verwendung

Sie können die Funktion testen, indem Sie auf der Projektseite Ihres Projekts VP9 als bevorzugten Videocodec auswählen. Video API Account.

  • Für weitergeleitete Sitzungen ist SVC deaktiviert.
  • Für geroutete Sitzungen wird SVC automatisch eingeschaltet.

Hinweise zur Archivierung mit VP9-Videos

Unsere Plattform bietet zwei Archivierungsmodi: zusammengesetzte Archive und einzelne Stream-Archive, die auch weiterhin funktionieren, wenn VP9 als bevorzugter Codec ausgewählt wird. In zusammengesetzten Archiven werden Aufzeichnungen als zusammengesetzte MP4-Dateien mit H.264-Video und AAC-Audio gespeichert, wodurch eine einzige, fertige Ausgabe entsteht. Im Gegensatz dazu speichern einzelne Stream-Archive die Medien jedes Teilnehmers separat als WebM-Streams mit VP9-SVC-Video (Scalable Video Coding).

Die Unterstützung für VP9-SVC kann sowohl bei kommerziellen als auch bei Open-Source-Playern variieren, abhängig von der Version und der jeweiligen Implementierung. Beispielsweise können bei der Wiedergabe einzelner Stream-Archive nicht alle Player SVC-kodierte Streams korrekt verarbeiten. Im Fall von FFMPEG ist nur der libvpx-vp9-Codec in der Lage, diese Streams ordnungsgemäß zu dekodieren. Für eine korrekte Wiedergabe kann der folgende Befehl verwendet werden:

ffplay -vcodec libvpx-vp9 vp9_with_svc.webm

Wenn Sie zudem eine SVC-kodierte WebM-Datei in einen Standard-VP8-Stream ohne SVC (für eine breitere Kompatibilität) konvertieren müssen, können Sie den folgenden FFMPEG-Befehl verwenden, um das Video zu transkodieren:

ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm -c:v libvpx vp8.webm

Bei dieser Transkodierung werden die SVC-Ebenen entfernt, wodurch sichergestellt wird, dass das Video in Playern abgespielt werden kann, die VP9 und/oder SVC nicht vollständig unterstützen.

Wenn Sie darüber hinaus die SVC-Schichten entfernen möchten, dabei aber den VP9-Codec beibehalten wollen, können Sie Folgendes verwenden:

ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm vp9_without_svc.webm

Bekannte Probleme

Uns sind die folgenden Einschränkungen und bekannten Probleme bekannt:

  • Bei Experience Composer-Workloads mit hochdynamischen Videoinhalten und komplexen Texturen schnitt die Ausgabe-Videoqualität von VP9-kodierten Experience Composer- Streams in VMAF-Tests (Perceptual Video Assessment) schlechter ab als die von VP8-kodierten „Experience Composer“-Streams. Dieser Qualitätsunterschied bei „Experience Composer“ sollte bei Standardanwendungen für Videokonferenzen mit Bildbearbeitung nicht wahrnehmbar sein.

Häufig gestellte Fragen

Wie steht es um die Kompatibilität der VP9-Browser?

Seit 2024 wird VP9 von allen gängigen Browsern vollständig unterstützt. Dazu gehören Google Chrome, Firefox, Microsoft Edge, Samsung Internet, Opera und WebView für Android, die bereits seit etwa 2016 vollständige VP9-Kompatibilität bieten. Apples Safari ab Version 15 und WebView unter iOS ab Version 15 unterstützen VP9.

Welche Geräte unterstützen VP9?

Ab 2025 unterstützen die meisten modernen Geräte VP9 für WebRTC-Dienste vollständig. Dazu gehören Desktop-PCs, Laptops und Mobilgeräte, auf denen aktuelle Versionen der gängigen Browser wie Google Chrome, Firefox, Microsoft Edge, Opera, WebView für Android sowie Safari und WebView für iOS (ab Version 15) laufen. Zwar können diese Browser die Videokodierung hardwaregestützt durchführen, doch ist die Hardwareunterstützung für die Kodierung und Dekodierung nicht überall vorhanden. Selbst wenn die Hardware beispielsweise in der Lage ist, VP9 zu kodieren und zu dekodieren, verwenden unsere nativen SDKs für VP9 eine softwaregestützte Videokodierung.

Andererseits ist die SVC-Unterstützung durch Hardware und Software noch nicht so weit verbreitet.

Hinweis: VP9 wird von Firefox unterstützt, SVC hingegen nicht.

Welche Geräte werden empfohlen?

VP9 bietet eine verbesserte Videokomprimierung gegenüber VP8, was jedoch mit einer höheren CPU-Auslastung einhergeht. Bei modernen Gerätemodellen führender Marken (z. B. Apple iPhone, Google Pixel, Samsung Galaxy usw.) ist mit einer guten Leistung zu rechnen.

Eine weitere Funktion mit ähnlichen CPU-Anforderungen ist die Vonage Media Processor API. Bei Geräten, die diese Anforderungen erfüllen, ist davon auszugehen, dass sie VP9 gut verarbeiten können.

Empfohlene Geräte nach Plattform:

Welche Client SDK-Versionen kann ich verwenden?

Die Angaben in der Codecs-Seite gilt. Eine vollständige VP9- und SVC-Unterstützung mit den während der Early-Access-Phase entwickelten Verbesserungen ist jedoch ab der Release-Version 2.29 verfügbar. Falls Sie kein Upgrade durchführen können, steht eine grundlegende VP9- und SVC-Unterstützung ab der Web- und Native-Client- SDK-Version 2.27 zur Verfügung.

Was passiert, wenn ein Browser, ein SDK oder ein Gerät VP9 nicht unterstützt?

Handelt es sich um einen Publisher, wird auf VP8 zurückgegriffen. Handelt es sich um einen Subscriber, kann dieser das Video nicht abonnieren und erhält lediglich Audio.

Was passiert, wenn ein Browser/SDK/Gerät VP9, aber nicht SVC unterstützt?

Sowohl für Anbieter als auch für Abonnenten wird VP9 ausgehandelt, jedoch ohne die Unterstützung der Skalierbarkeit. Der Endpunkt nutzt VP9 transparent ohne SVC.

Wie kann ich den Codec in einer Sitzung überwachen?

Wie bei jedem anderen Codec zeigt das Tool „Video Inspector“ im Modul „Quality Metrics“ den Codec, die Auflösung und die Bildrate an. Bewegen Sie den Mauszeiger einfach über einen beliebigen Punkt auf einer dargestellten Linie, um den verwendeten Codec anzuzeigen.

Woher weiß ich, welchen Codec ein Endpunkt verwendet?

Die SDKs bieten Methoden zum Abrufen eines RTCStatsReport-Objekts für jeden Stream, das die verwendeten Audio- und Video-Codecs enthält. Code-Beispiele finden Sie unter Referenzhandbuch für Abonnenten oder das Verlagsangaben Handbuch für JS. Für Linux finden Sie weitere Informationen hier.