Skalierbares Video

Skalierbares Video ist eine Funktion für geroutete Sitzungen, die die Videoqualität in Sitzungen mit mehreren Teilnehmern verbessert, indem jeder Teilnehmer eine Videoqualität erhält, die seinen aktuellen Netzwerkbedingungen entspricht - unabhängig von allen anderen Teilnehmern.

Ohne skalierbares Video leitet der Media Router die gleiche Videoqualität an alle Abonnenten eines Streams weiter. Wenn sich die Verbindung eines Teilnehmers verschlechtert, teilt der Router dem Anbieter anhand einer Bandbreitenschätzung mit, dass er die Bitrate reduzieren soll, wodurch sich die Qualität für alle Teilnehmer des Streams verringert. Bei aktivem skalierbarem Video wählt der Router die am besten geeignete Qualitätsstufe für jeden Abonnenten unabhängig und in Echtzeit aus, ohne die Qualität für andere Abonnenten zu beeinflussen.

Skalierbares Video erfordert eine weitergeleitete Sitzung (eine Sitzung, die den Medien-Router verwendet). Sie ist in weitergeleiteten Sitzungen nicht verfügbar und wäre dort auch nicht sinnvoll, da die Streams direkt zwischen den Clients übertragen werden, ohne dass ein Router zur Auswahl oder zum Wechsel der Qualitätsebenen im Weg steht. Siehe Der Media Router und die Medienmodi.

Skalierbares Video ist standardmäßig aktiviert. Die Einstellung auf Anwendungsebene ist standardmäßig auf AutoDas bedeutet, dass der Media Router skalierbares Video automatisch aktiviert, wenn sich mehr als zwei Clients in einer Sitzung befinden und alle anderen Bedingungen erfüllt sind. Sie können ihn auch auf Auf (immer aktiv) oder Aus - siehe Einstellung auf Applikationsebene für Details. Für die meisten Applications sind keine Codeänderungen erforderlich.

Codecs und Skalierbarkeitsmodelle

Wie skalierbares Video funktioniert, hängt von dem Codec ab, den der Herausgeber aushandelt. Wenn Sie die Unterschiede kennen, können Sie den richtigen Codec für Ihren Anwendungsfall auswählen, z. B. wenn Sie die CPU-Auslastung des Herausgebers, die Upstream-Bandbreite oder die Qualitätsanpassung auf der Seite des Abonnenten optimieren müssen.

VP8: Simulcast

Mit VP8Skalierbares Video wird implementiert durch Simultanübertragung. Der Herausgeber kodiert und überträgt mehrere völlig getrennte Bitströme mit unterschiedlichen Auflösungen und Bildfrequenzen - z. B. 1080p, 540p und 270p mit jeweils eigenen zeitlichen (Bildfrequenz-)Schichten. Jeder Stream ist in sich abgeschlossen und kann für sich decodiert werden.

Da die einzelnen Streams völlig unabhängig voneinander sind, kann der Media Router jeden Teilnehmer ohne erneute Codierung sofort auf eine andere Qualitätsstufe umschalten und bietet so eine hohe Ausfallsicherheit bei sich ändernden Netzwerkbedingungen.

Kompromiss: Das Kodieren und Hochladen mehrerer Streams erfordert mehr CPU und Upstream-Bandbreite auf der Seite des Herausgebers als das Senden einer einzigen Qualität. Die Kodierung von Schichten mit niedrigerer Auflösung ist deutlich billiger als die der höchsten Qualität, aber die Gesamtkosten sind immer noch höher als bei einem nicht simulierten Stream.

VP9: Skalierbare Videokodierung (SVC)

Mit VP9skalierbare Videoanwendungen Skalierbare Videokodierung (SVC). Der Herausgeber kodiert einen einzelnen Bitstrom, in den mehrere räumliche (Auflösung) und zeitliche (Bildrate) Ebenen mathematisch eingebettet sind. Jede höhere Schicht hängt von den niedrigeren Schichten ab, so dass ein Decoder, der nur die Basisschicht empfängt, eine niedrige Qualität erhält, während ein Decoder, der alle Schichten empfängt, die volle Qualität erhält - und das aus demselben Bitstrom.

Die CPU-Kosten des Publishers für die SVC-Codierung sind höher als die für die Codierung eines einzelnen Streams - ungefähr vergleichbar mit VP8-Simulcast -, aber SVC erfordert weniger Upstream-Bandbreite, da nur ein Bitstream hochgeladen werden muss, anstatt mehrere unabhängige Streams. Aus dem einzelnen kodierten Stream kann der Media Router genau die richtige Teilmenge von Schichten für jeden Abonnenten extrahieren und weiterleiten, was eine effiziente und flexible Qualitätsanpassung ermöglicht, die auch gegenüber Paketverlusten widerstandsfähiger ist.

SVC erfordert, dass sowohl der Publisher-Endpunkt als auch der Media Router VP9 SVC unterstützen. Firefox unterstützt VP9, aber nicht SVC - ein Firefox-Herausgeber sendet VP9 ohne Layer, so dass der Media Router die Qualität für diesen Stream nicht anpassen kann.

Für eine vollständige Erklärung der SVC-Schichten, der Skalierbarkeitsmodi (L1T3, L2T3, L3T3), Archivierungsverhalten und Geräteunterstützung, siehe VP9 Skalierbare Videocodierung für geroutete Sitzungen.

Der wichtigste Unterschied auf einen Blick

Aspekt Simultanübertragung (VP8) SVC (VP9)
Was der Verlag sendet Mehrere unabhängige Bitströme mit unterschiedlichen Auflösungen und Bildraten (unterschiedliche SSRCs/RIDs) 1 Bitstrom mit eingebetteten räumlichen und zeitlichen Schichten (einzelnes SSRC)
Räumliche Schichten Multi-Stream: jede Auflösung ist ein separater kodierter Stream Eingebettet in einen einzigen Bitstrom
Zeitliche Schichten Jeder Simulcast-Stream kann zeitliche Schichten enthalten Eingebettet in einen einzigen Bitstrom
Rolle des Medienrouters Auswählen, welcher Stream weitergeleitet werden soll Extrahieren und Weiterleiten der richtigen Schichten
Unterstützung für Firefox-Publisher Unterstützt durch RID-basierte Kodierungen VP9 ja; SVC wird von Firefox nicht unterstützt

Auflösungsverhältnis der räumlichen Ebene: Jeder räumliche Schritt verwendet eine Auflösungsverhältnis 2:1. Eine L3T3 Stream hat Ebenen mit 100%, 50% und 25% der Quellauflösung (z.B. 1080p → 540p → 270p). Dies ist der Grund setPreferredResolution() können sehr unterschiedliche Auflösungen anstreben.

H.264: Skalierbares Video wird nicht unterstützt

Der H.264-Codec wird von der Vonage Video API für die Veröffentlichung und das Abonnieren vollständig unterstützt, aber Skalierbares Video ist für H.264-Streams nicht verfügbar. Der Media Router kann die Qualitätsebenen für H.264-Streams nicht wechseln, und die Einstellungen für skalierbares Video haben keine Auswirkungen, wenn H.264 ausgehandelt wird. Wenn Ihre Anwendung skalierbares Video erfordert, verwenden Sie stattdessen VP8 oder VP9. Siehe . Video-Codecs.

Skalierbare Videounterstützung

Skalierbares Video wird für VP8 Simulcast und VP9 SVC unterstützt. Es wird nicht unterstützt für H.264-Streams. Es ist nur verfügbar in weitergeleitete Sitzungen.

Die folgenden Clients unterstützen skalierbares Video:

  • Web-SDK - Chrome, Firefox, Safari, Samsung Internet, WebView Android, WebView auf iOS und Chromium-basiertes Edge. Hinweis: Firefox unterstützt VP8 Simulcast, aber nicht VP9 SVC.
  • Android-SDK (auf unterstützten Geräten)
  • iOS-SDK (auf unterstützten Geräten)
  • Windows-SDK
  • Linux-SDK
  • macOS-SDK
  • React Native SDK (auf unterstützten Geräten)

Einzelheiten zur Kompatibilität von VP9-SVC-Geräten und -Browsern finden Sie unter VP9 Skalierbare Videocodierung für geroutete Sitzungen.

Anmerkung: Standardmäßig ist skalierbares Video für Streams zur Bildschirmfreigabe deaktiviert und für Kamera- und benutzerdefinierte Videoquellen-Streams aktiviert. Um skalierbares Video für die Bildschirmfreigabe zu aktivieren, siehe Skalierbare Streams zur Bildschirmfreigabe.

Skalierbares Video verwenden

Einstellung auf Applikationsebene

Skalierbares Video verfügt über drei Modi, die Sie pro Anwendung in der Vonage Dashboard:

  1. Melden Sie sich bei Ihrem Vonage Video API Account.
  2. Wählen Sie im Menü auf der linken Seite Applications.
  3. Klicken Sie bei einer bestehenden Anwendung auf das Drei-Punkte-Menü und wählen Sie bearbeiten. Für eine neue Anwendung rufen Sie den Abschnitt Fähigkeiten auf, nachdem Sie auf Erstellen Sie eine neue Anwendung.
  4. Umschalten zur Aktivierung der Video Option.
  5. Scrollen Sie nach unten und klicken Sie auf Erweiterte Funktionen anzeigen.
  6. Unter Skalierbares Videowählen Sie eine der folgenden Möglichkeiten:
    • Auto (empfohlen) - Der Media Router aktiviert skalierbares Video, wenn sich mehr als zwei Clients in einer Sitzung befinden. Lassen Sie diese Option aktiviert, es sei denn, Sie haben einen besonderen Grund, sie zu deaktivieren.
    • Auf - Skalierbares Video ist immer (in unterstützten Clients) für alle Sitzungen in dieser Anwendung aktiviert.
    • Aus - Skalierbares Video ist für alle Sitzungen in dieser Anwendung deaktiviert. Verwenden Sie dies, um die Auflösung und die Bildrate zu sperren oder um die CPU- und Bandbreitennutzung des Herausgebers zu reduzieren.
  7. Klicken Sie auf Änderungen speichern.

Anmerkung: Diese Einstellung steuert VP8-Simultanübertragung Verhalten. VP9 verwendet immer SVC, wenn es unterstützt wird, und H.264 unterstützt kein skalierbares Video - beides wird durch diese Einstellung nicht beeinflusst.

Anmerkung: Streams benötigen mehr Upstream-Bandbreite vom Herausgeber, wenn skalierbares Video aktiv ist, da zusätzliche Qualitätsebenen kodiert und übertragen werden.

Skalierbare Streams zur Bildschirmfreigabe

Standardmäßig ist skalierbares Video deaktiviert für Screen-Sharing-Streams und aktiviert für Kamera- und benutzerdefinierte Videoquellenströme. Inhalte für die Bildschirmfreigabe ändern sich in der Regel weniger häufig als Kameravideos, so dass die zusätzlichen Codierungskosten für skalierbares Video in der Regel unnötig sind. Die Aktivierung kann jedoch in Sitzungen von Vorteil sein, in denen Screen-Sharing-Teilnehmer unterschiedliche Netzwerkbedingungen haben. Sie können die Standardeinstellung pro Herausgeber außer Kraft setzen:

Einstellung der bevorzugten Bildrate und Auflösung des Teilnehmers

Wenn ein Stream mit skalierbarem Video veröffentlicht wird, können die Abonnenten dem Media Router eine bevorzugte Qualität mitteilen. Der Medienrouter wählt die nächstgelegene verfügbare Ebene aus, die den tatsächlichen Netzwerkbedingungen des Abonnenten entspricht.

Das ist wichtig: Aufruf von setPreferredResolution() oder setPreferredFrameRate() eine Neuaushandlung mit dem Medien-Router auslöst. Dies wiederholt oder in schneller Folge zu tun, ist kostspielig - es verbraucht CPU und kann die Gesamtqualität des Streams beeinträchtigen. Legen Sie die bevorzugten Werte einmal fest (oder nur, wenn sich das Layout des Teilnehmers wesentlich ändert), anstatt sie ständig anzupassen.

SDK Bildfrequenz Auflösung
Web-SDK Subscriber.setPreferredFrameRate() - siehe Abo-Streams Web-Leitfaden Subscriber.setPreferredResolution() - siehe Abo-Streams Web-Leitfaden
Android-SDK SubscriberKit.setPreferredFrameRate() - siehe abonnieren-streams Android Anleitung SubscriberKit.setPreferredResolution() - siehe abonnieren-streams Android Anleitung
iOS-SDK OTSubscriberKit.preferredFrameRate - siehe iOS-Leitfaden für Abonnentenströme OTSubscriberKit.preferredResolution - siehe iOS-Leitfaden für Abonnentenströme
Windows-SDK Subscriber.PreferredFramerate - siehe abonnieren-streamt Windows Anleitung Subscriber.PreferredResolution - siehe abonnieren-streamt Windows Anleitung
Linux-SDK otc_subscriber_set_preferred_frame_rate() - siehe abonnieren-streamt Linux-Leitfaden otc_subscriber_set_preferred_resolution() - siehe abonnieren-streamt Linux-Leitfaden
React Native preferredFrameRate Eigenschaft von OTSubscriber - siehe abonnieren-streams React Native Anleitung preferredResolution Eigenschaft von OTSubscriber - siehe abonnieren-streams React Native Anleitung

So verifizieren Sie, dass Scalable Video funktioniert

Im SDK gibt es kein einzelnes Flag "skalierbares Video aktiv", aber Sie können mit den folgenden Ansätzen bestätigen, dass es funktioniert.

Video-Inspektor

Die Video-Inspektor Tool im Modul Qualitätsmetriken zeigt den Codec, die Auflösung und die Bildrate an. Bewegen Sie den Mauszeiger über einen beliebigen Punkt auf einer gezeichneten Linie, um den aktuell verwendeten Codec anzuzeigen. Wenn skalierbares Video aktiviert ist, kann die Auflösung und/oder die Bildrate für einen oder mehrere Teilnehmer als Reaktion auf sich ändernde Netzwerkbedingungen dynamisch angepasst werden.

WebRTC-Statistiken

Jedes SDK stellt den zugrunde liegenden WebRTC-Statistikbericht zur Verfügung. Auf der Verlegerseite, inspizieren Sie RTCOutboundRtpStreamStats:

  • Mit VP8-Simultanübertragungsehen Sie mehrere ssrc Einträge mit unterschiedlichen frameWidth/frameHeight Werte - einen pro Simulcast-Ebene.
  • Mit VP9 SVCsehen Sie eine einzelne ssrc mit einer scalabilityMode Eigenschaft gesetzt (zum Beispiel, L3T3).

SDK-Methoden für den Zugriff auf den Statistikbericht:

Checkliste: Bedingungen, die erfüllt sein müssen, damit skalierbares Video aktiv ist

Wenn Sie kein adaptives Qualitätsverhalten beobachten können, überprüfen Sie Folgendes:

  • Die Sitzung ist geroutet (nicht weitergegeben).
  • Skalierbares Video ist nicht eingestellt auf Aus auf der Ebene der Anwendung.
  • Der ausgehandelte Codec ist VP8 oder VP9 (nicht H.264).
  • Der Verlag läuft auf einem unterstützter Client.

Häufige Missverständnisse und FAQs

Ist skalierbares Video das Gleiche wie VP9 SVC?

Nein. "Skalierbares Video" ist der Name der Vonage Video API-Funktion. Die technischer Mechanismus hängt vom jeweiligen Codec ab:

  • VP8 implementiert skalierbares Video durch Simultanübertragung - der Herausgeber sendet mehrere unabhängige Datenströme.
  • VP9 implementiert skalierbares Video durch SVC - der Herausgeber sendet einen Stream mit eingebetteten Schichten.

Mit beiden Mechanismen kann der Media Router die Qualität, die jeder Teilnehmer erhält, anpassen. Wenn in der Dokumentation von "skalierbarem Video" die Rede ist, ohne einen Codec zu nennen, bezieht sich dies auf die Funktion als Ganzes.

Erzwingt das Festlegen eines bevorzugten Codecs das Einschalten von skalierbarem Video?

Nein. Die Auswahl eines bevorzugten Codecs (im Dashboard oder über die preferredVideoCodecs Publisher-Option) ist unabhängig von skalierbarem Video. Ob skalierbares Video aktiviert wird, hängt von allen folgenden Faktoren ab:

  1. Die Einstellung für skalierbare Videoanwendungen (Ein / Aus / Auto).
  2. Die weitergeleitete Sitzung.
  3. Der ausgehandelte Codec unterstützt skalierbares Video (VP8 oder VP9 - nicht H.264).
  4. Der Client oder Browser des Herausgebers unterstützt skalierbares Video.

Warum ist Subscriber.setPreferredResolution() Keine Anpassung der Qualität?

Die Abonnentenseite setPreferredResolution() und setPreferredFrameRate() sind Hinweise auf den Media Routerund keine direkten Befehle an den Encoder des Anbieters. Der Medien-Router kann nur dann auf diese Hinweise reagieren, wenn er aktiv zwischen skalierbaren Videoschichten für diesen Abonnenten auswählt. Wenn eine der folgenden Bedingungen zutrifft, gibt es keine Ebenen, aus denen ausgewählt werden kann, und die Hinweise haben keine Wirkung:

  • Skalierbares Video wird auf der Anwendungsebene oder im Publisher-Stream deaktiviert.
  • Der ausgehandelte Codec ist H.264 (skalierbares Video wird nicht unterstützt).
  • Der Client des Herausgebers erzeugt keine skalierbaren Schichten (z. B. ein Firefox-Herausgeber, der VP9 ohne SVC-Schichten sendet).
  • Der Herausgeber hat eine CPU- oder Bandbreitenbeschränkung und sendet keine höheren Schichten, aus denen der Router auswählen kann.
  • Die Sitzung wird weitervermittelt - bei einer weitervermittelten Sitzung leitet der Medien-Router keine Streams weiter, so dass keine Layer-Auswahl stattfinden kann. Beachten Sie, dass bei weitergeleiteten (P2P-)Sitzungen der Encoder des Herausgebers seine Ausgabe direkt an die Netzwerkbedingungen des Teilnehmers anpasst, was jedoch nicht mit einer skalierbaren Auswahl der Videoebene gleichzusetzen ist.

Anmerkung: In weitergeleiteten Sitzungen akzeptieren einige SDKs diese API-Aufrufe möglicherweise weiterhin ohne Fehler, aber der Media Router ist nicht an der Stream-Weiterleitung beteiligt, so dass die Einstellungen für die Auswahl der Qualitätsschicht nicht berücksichtigt werden können.

Anmerkung: Publisher-seitige Auflösungs- und Framerate-APIs (sofern in bestimmten SDKs verfügbar) verhalten sich anders - sie steuern direkt die Auflösung und Framerate des kodierten Streams und nicht einen Qualitätshinweis des Media Routers.

Kann ich skalierbare und nicht skalierbare Publisher in der gleichen Sitzung mischen?

Ja. Skalierbares Video wird pro Stream bestimmt, nicht pro Sitzung. Eine Sitzung kann gleichzeitig Publisher haben, die skalierbares Video verwenden, und Publisher, die dies nicht tun (z. B. H.264-Publisher oder Clients, die mit deaktiviertem skalierbarem Video veröffentlichen). Der Medien-Router behandelt jeden Stream unabhängig.

Wirkt sich skalierbares Video auf die Archivierung aus?

Für VP8-SimultanübertragungDie Aufzeichnung erfolgt in der höchsten verfügbaren Qualitätsstufe.

Für VP9 SVCWenn Sie den Stream eines Teilnehmers als VP9 SVC-kodierte WebM-Datei speichern, werden die einzelnen Archive als solche gespeichert. Zusammengestellte Archive werden unabhängig vom Sitzungscodec immer in H.264/AAC MP4 transcodiert.

Die Wiedergabe von VP9 SVC WebM-Dateien funktioniert möglicherweise nicht in allen Media-Playern. Anweisungen zur Wiedergabe und Transkodierungsbefehle finden Sie unter Hinweise zur Archivierung im VP9-Leitfaden.

Weitere Informationen finden Sie unter diesen Support-Artikel.