Ü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 Videostrom mehrere räumliche und zeitliche Qualitäten enthalten. Dies ermöglicht einer SFU (Selective Forwarding Unit), wie z. B. dem Vonage Video-Media-Router, um unterschiedliche Auflösungen und Bildraten an jeden Client weiterzuleiten, der einen SVC-fähigen Publisher abonniert hat. Dies ist effizienter als Simultanübertragungbei dem der Herausgeber mehrere Videoströme mit unterschiedlichen Auflösungen sendet, wie es bei VP8 üblich ist.
Skalierbarkeitsmodus
Der Skalierbarkeitsmodus in SVC definiert die Anzahl und Art der räumlichen und zeitlichen Ebenen in einem SVC-Stream sowie die Abhängigkeiten zwischen ihnen. Weitere Einzelheiten finden Sie in der W3C WebRTC SVC-Spezifikation. Der Skalierbarkeitsmodus wird für einen Publisher definiert, und der Vonage Video Media Router leitet den passenden Stream aus den verfügbaren Streams an den Abonnenten weiter.
Bei der Veröffentlichung eines Kamerastreams unterstützt die Vonage Video API die L1T3, L2T3und 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 angepasst wird, basierend auf der Auflösung des Kamerastroms und der geschätzten Bandbreite zwischen dem Publisher und dem Vonage Video Media Router.
- Bei ausreichender Bandbreite sind die räumlichen Ebenen für FHD 1920x1080, 960x540 und 480x270 Pixel.
- Bei HD sind dies 1280x720, 640x360 und 320x180. Bei SD gibt es nur zwei räumliche Ebenen: 720x480 und 360x240.
- Ähnlich verhält es sich mit den temporalen Schichten: 30 FPS für die höchste temporale Schicht, 15 FPS für die mittlere temporale Schicht und 7,5 FPS für die unterste temporale Schicht.
Sowohl für Web- als auch für native Clients wird bei der Veröffentlichung eines Screen-Sharing-Streams der Skalierbarkeitsmodus durch eine Option bestimmt, die während der Veröffentlichung festgelegt wird (weitere Einzelheiten finden Sie in der Skalierbare Video-Seite). Ist sie deaktiviert, verwendet der Stream den L1T1-Modus, der eine einzige räumliche und zeitliche Ebene bietet (keine Skalierbarkeit). Wenn sie jedoch aktiviert ist, wählt das System dynamisch zwischen L1T1, L2T1 oder L3T1, basierend auf der geschätzten Bandbreite zwischen dem Publisher und dem Vonage Video Media Router sowie der Auflösung des Screen-Sharing-Streams.
Simulcast (verwendet in VP8) vs. SVC (verwendet in VP9)
Beim Simulcast (mit VP8) sendet der Herausgeber mehrere unabhängige Videoströme, die jeweils aus verschiedenen zeitlichen Ebenen mit unterschiedlichen Auflösungen und Bitraten bestehen, an den Medienserver. Diese kodierten zeitlichen Ebenen innerhalb mehrerer Streams ermöglichen es dem Server, dynamisch den am besten geeigneten Stream und die am besten geeignete Ebene für jeden Abonnenten auf der Grundlage der Netzwerkbedingungen auszuwählen. Diese Methode verbessert zwar die Effizienz durch Anpassung der Videoqualität in Echtzeit, erfordert aber, dass der Herausgeber mehrere Versionen desselben Streams kodiert (was die CPU-Belastung erhöht) und überträgt (was die Netzbelastung erhöht), um unterschiedlichen Bedingungen gerecht zu werden.
Im Gegensatz dazu bettet SVC (Scalable Video Coding), wie in VP9 unterstützt, mehrere räumliche und zeitliche Qualitäten in einen einzigen Stream ein. Der Medienserver kann dann die entsprechende Schicht extrahieren und an jeden Abonnenten weiterleiten, ohne dass der Herausgeber mehrere Streams senden muss. Dies macht SVC bandbreiteneffizienter und verbessert die Effizienz der Arbeitslast des Herausgebers im Vergleich zu Simulcast.
Verwendung
Sie können die Funktion testen, indem Sie VP9 als bevorzugten Videocodec auswählen, indem Sie ihn in Ihren Applications-Einstellungen über die Option Dashboard von Vonage.
- Für weitergeleitete Sitzungen ist SVC deaktiviert.
- Für geroutete Sitzungen wird SVC automatisch eingeschaltet.
Hinweise zur Archivierung
Unsere Plattform bietet zwei Archivierungsmodi: Composed Archives und Individual Archives. Diese funktionieren auch dann, wenn Sie VP9 als bevorzugten Codec auswählen. In zusammengesetzten Archiven werden die Aufnahmen als zusammengesetzte MP4-Dateien mit H.264-Video und AAC-Audio gespeichert, die eine einzige, endgültige Ausgabe liefern. Im Gegensatz dazu werden bei Einzelarchiven die Medien jedes Teilnehmers separat als WebM-Streams mit VP9 SVC (Scalable Video Coding) Video gespeichert.
Die Unterstützung für VP9 SVC in kommerziellen und Open-Source-Playern kann je nach Version und spezifischer Implementierung variieren. Bei der Wiedergabe von Einzelarchiven können zum Beispiel nicht alle Player SVC-codierte Streams korrekt verarbeiten. Im Falle von FFMPEG ist nur der libvpx-vp9-Codec in der Lage, diese Streams korrekt zu dekodieren. Für eine korrekte Wiedergabe kann der folgende Befehl verwendet werden:
ffplay -vcodec libvpx-vp9 vp9_with_svc.webm
Wenn Sie außerdem eine SVC-kodierte WebM-Datei in einen Standard-VP8-Stream ohne SVC konvertieren müssen (um eine breitere Kompatibilität zu erreichen), 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, sodass das Video auch auf Playern abgespielt werden kann, die VP9 und/oder SVC nicht vollständig unterstützen.
Wenn Sie außerdem die SVC-Ebenen entfernen und den VP9-Codec beibehalten möchten, können Sie dies tun:
ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm vp9_without_svc.webm
Häufig gestellte Fragen
Wie steht es um die Kompatibilität der VP9-Browser?
Ab 2024 wird VP9 von allen wichtigen Browsern vollständig unterstützt. Dazu gehören Google Chrome, Firefox, Microsoft Edge, Samsung Internet, Opera und WebView Android, die seit etwa 2016 vollständige VP9-Kompatibilität bieten. Apples Safari 15+ und WebView auf iOS 15+ unterstützen VP9.
Welche Geräte unterstützen VP9?
Ab dem Jahr 2025 unterstützen die meisten modernen Geräte VP9 für WebRTC-Dienste vollständig. Dazu gehören Desktops, Laptops und Mobilgeräte, auf denen aktuelle Versionen der wichtigsten Browser wie Google Chrome, Firefox, Microsoft Edge, Opera, Samsung Internet, WebView Android sowie Safari und WebView auf iOS (ab Version 15) laufen. Während diese Browser die Videocodierung über die Hardware durchführen können, ist die Hardwareunterstützung für die Codierung und Decodierung nicht so allgegenwärtig. Selbst wenn die Hardware in der Lage ist, VP9 zu kodieren und zu dekodieren, verwenden unsere nativen SDKs beispielsweise Software-Videokodierung für VP9.
Andererseits ist die SVC-Unterstützung durch Hardware und Software noch nicht so weit verbreitet.
Anmerkung: VP9 wird von Firefox unterstützt, SVC jedoch nicht.
Welche Geräte werden empfohlen?
VP9 bietet eine bessere Videokomprimierung als VP8, allerdings mit dem Nachteil einer höheren CPU-Last. Es ist davon auszugehen, dass moderne Gerätemodelle führender Marken (z. B. Apple iPhone, Google Pixel, Samsung Galaxy usw.) gut funktionieren.
Eine weitere Funktion mit ähnlichen CPU-Beschränkungen ist die Vonage Media Processor API. Von Geräten, die diese Anforderungen erfüllen, kann erwartet werden, dass sie VP9 gut verarbeiten.
Empfohlene Geräte nach Plattform:
Welche Client SDK-Versionen kann ich verwenden?
Die Angaben in der Codecs-Seite gilt. Die vollständige VP9- und SVC-Unterstützung mit den während der Early Access-Phase entwickelten Verbesserungen ist jedoch ab der Version 2.29 verfügbar. Wenn Sie kein Upgrade durchführen können, beginnt die grundlegende VP9- und SVC-Unterstützung mit der Web- und Native Client SDK-Version 2.27.
Was passiert, wenn ein Browser/SDK/Gerät VP9 nicht unterstützt?
Wenn es sich um einen Verleger handelt, wird er auf VP8 zurückgreifen. Wenn es sich um einen Abonnenten handelt, kann er kein Video abonnieren und empfängt nur Audio.
Was passiert, wenn ein Browser/SDK/Gerät VP9, aber nicht SVC unterstützt?
Sowohl für die Herausgeber als auch für die Teilnehmer wird VP9 ausgehandelt, jedoch ohne die Unterstützung der Skalierbarkeit. Der Endpunkt wird transparent VP9 ohne SVC verwenden.
Wie kann ich den Codec in einer Sitzung überwachen?
Wie bei jedem anderen Codec zeigt das Videoinspektor-Tool Codec, Auflösung und Bildrate im Modul Qualitätsmetrik an. Fahren Sie einfach mit der Maus über einen beliebigen Punkt auf einer gezeichneten Linie, um den verwendeten Codec zu sehen.
Woher weiß ich, welchen Codec ein Endpunkt verwendet?
Die SDKs bieten Methoden zum Abrufen von RTCStatsReport Objekt für jeden Stream, das den verwendeten Audio- und Videocodec enthält. Um Codebeispiele zu sehen, werfen Sie einen Blick auf die Referenzhandbuch für Abonnenten oder die Herausgeber-Referenzhandbuch für JS.
Für Linux können Sie zusätzliche Informationen finden hier.