Interaktive Live-Videoübertragungen
Bei einer interaktiven Live-Videoübertragung kann eine große Anzahl von Clients live kommunizieren, indem sie die Streams der anderen Teilnehmer in der Sitzung veröffentlichen und abonnieren. Eine interaktive Live-Videobroadcast-Sitzung kann insgesamt bis zu 15.000 Teilnehmer unterstützen, je nach Anzahl der aktiven Verleger in der Sitzung.
In der nachstehenden Tabelle ist die Anzahl der Teilnehmer der interaktiven Live-Übertragung aufgeführt, die sich bei allen Herausgebern der Sitzung anmelden können. Die interaktiven Broadcast-Teilnehmer sind die Abonnenten mit niedriger Latenzzeit, die alle veröffentlichten Streams und die Zuschauer der interaktiven Live-Übertragung ansehen können. Die Herausgeber der Sitzung können als Gastgeber der Sendung betrachtet werden, und als Gastgeber können sie auch die anderen veröffentlichten Streams abonnieren. Mit zunehmender Zahl der Herausgeber pro Sitzung verringert sich auch die Zahl der gleichzeitigen Betrachter aller veröffentlichten Streams.
Wenn beispielsweise 1 oder 2 veröffentlichte Streams in der Sitzung vorhanden sind, können bis zu 15.000 Teilnehmer beide veröffentlichten Streams mit Echtzeitlatenz als Live-Übertragungsteilnehmer sehen. Ähnlich verhält es sich bei drei veröffentlichten Streams in der Sitzung: Bis zu 13.000 Teilnehmer können alle drei veröffentlichten Streams mit Echtzeitlatenz als Live-Übertragungsteilnehmer sehen.
| Numbers der Verleger * | Gleichzeitige interaktive Live-Übertragung Teilnehmer pro Sitzung (Teilnehmer abonnieren bei allen Verlagen) |
|---|---|
| 1 | 15,000 |
| 2 | 15,000 |
| 3 | 13,000 |
| 4 | 11,000 |
| 5 | 8,000 |
| 6 | 6,800 |
| 7 | 5,700 |
| 8 | 5,000 |
| 9 | 4,300 |
| 10 | 4,000 |
| 12 | 3,400 |
| 15 | 2,900 |
| 16 | 2,800 |
| 20 | 2,000 |
| 25 | 1,600 |
| 50 | 800 |
| 55 | 700 |
- Zu den veröffentlichten Streams gehören sowohl Kamera- als auch Screen-Sharing-Streams.
Wenn die Anzahl der Teilnehmer an der Sitzung größer ist als der Wert in der Tabelle, sollten Sie die Live-Streaming-Funktion verwenden (siehe Live-Streaming-Übertragungen).
Ebenso unterstützen die Sitzungen bis zu 15.000 Clients, die sich gleichzeitig mit einer Sitzung verbinden.
Anwendungsentwickler sollten die Plattformgrenzen in der Anwendung verwalten. Siehe den nächsten Abschnitt.
Die Funktion der interaktiven Live-Videoübertragung ist nur für geroutete Sitzungen verfügbar (Sitzungen, die den Vonage Media Router verwenden). Weitere Informationen finden Sie unter Die Medien-Router und Medien-Modi.
Interaktive Live-Videoübertragungen unterstützen HD-Video (sowie Video mit niedrigerer Auflösung), wenn die Ressourcen des Clients (Bandbreite und CPU) die Auflösung unterstützen.
Aufbau einer App zur Unterstützung interaktiver Live-Videoübertragungen
Es gibt einige API-Erweiterungen, die Sie verwenden sollten, um eine große Anzahl von Clients zu unterstützen, die sich mit Sitzungen verbinden. Siehe die folgenden Abschnitte:
- Unterdrückung von Verbindungsereignissen
- Erkennung der Überschreitung von Verbindungs- und Streamgrenzen
Unterdrückung von Verbindungsereignissen
Wenn eine große Anzahl von Clients eine Verbindung zu einer Sitzung herstellt, ist es wichtig, die Verbindungsereignisse in den Clients zu deaktivieren. Zu diesen Ereignissen gehören die Ereignisse, die ausgelöst werden, wenn andere Clients eine Verbindung zur Sitzung herstellen und diese wieder trennen. Die meisten Clients müssen diese Ereignisse nicht verarbeiten, und ihre Deaktivierung verhindert, dass die Clients Leistungseinbußen erleiden (z. B. beim Veröffentlichen oder Abonnieren von Audio-/Videoströmen), die durch diese Ereignisse mit hohem Volumen verursacht werden.
Das ist wichtig: Um Ihre Anwendung für diesen großen Umfang zu optimieren, sollten Sie die hier beschriebenen APIs zur Unterdrückung von Verbindungsereignissen verwenden.
Ab Version 2.10.0 enthält jedes der Client-SDKs (für Web, iOS und Android) eine API-Erweiterung zur Deaktivierung von Verbindungsereignissen im Client.
Obwohl Sie andere unterstützte Client-Versionen (2.9.0+) in großen Sitzungen verwenden können, werden Verbindungsereignisse in Clients, die ältere Versionen als 2.10.0+ verwenden, nicht unterdrückt. Bei Clients, die ältere Versionen von OpenTok.js verwenden, kann es aufgrund der hohen Anzahl von Verbindungsereignissen zu Leistungseinbußen kommen.
Unterdrückung von Verbindungsereignissen mit OpenTok.js (web)
Wenn Sie das Session-Objekt initialisieren, erstellen Sie ein Objekt mit der connectionEventsSuppressed Eigenschaft eingestellt auf trueund geben Sie dieses Objekt als options Parameter beim Aufruf des OT.initSession() Methode. Verbinden Sie sich dann mit der Sitzung:
var props = {connectionEventsSuppressed: true};
var session = OT.initSession(APPLICATION_ID, SESSION_ID, props);
session.connect(token, function(error) {
if (error) {
console.log('Error connecting: ', error.code, error.message);
} else {
console.log('Connected to the session.');
}
});
Dadurch wird verhindert, dass das Session-Objekt die connectionCreated und connectionDestroyed Ereignisse, wenn andere Clients eine Verbindung mit der Sitzung herstellen oder die Verbindung trennen. (Außerdem sendet der Vonage-Server diese Ereignisse nicht an den Web-Client).
Unterdrückung von Verbindungsereignissen mit dem iOS SDK
Wenn Sie ein OTSessionSettings-Objekt initialisieren, setzen Sie dessen connectionEventsSuppressed Eigenschaft zu YES. Dann übergeben Sie dieses Objekt als settings Parameter beim Aufruf des [OTSession initWithApiKey:sessionId:delegate:settings:] Methode, um das OTSession-Objekt zu initialisieren:
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.connectionEventsSuppressed = YES;
OTSession *session = [[OTSession alloc] initWithApiKey:applicationId
sessionId:sessionId
delegate:self
Settings:settings];
Verbinden Sie sich dann mit der Sitzung:
OTError* error = nil;
[session connectWithToken:kToken error:&error];
if (error) {
NSLog(@"connect failed with error: (%@)", error);
}
Dies verhindert, dass die [SessionDelegate session:connectionCreated:] Nachrichten gesendet werden, wenn andere Clients eine Verbindung mit der Sitzung herstellen oder die Verbindung trennen. (Außerdem sendet der Vonage-Server diese Ereignisse nicht an den iOS-Client).
Unterdrückung von Verbindungsereignissen mit dem Android SDK
Um eine Verbindung zur Sitzung herzustellen, instanziieren Sie ein Session.Builder-Objekt und geben Ihre App-ID und Sitzungs-ID an. Rufen Sie dann das connectionEventsSuppressed() Methode des Builder-Objekts und übergibt in true. Rufen Sie die build() Methode, um das Session-Objekt zu erstellen. Rufen Sie dann die connect() Methode des Session-Objekts, um eine Verbindung zur Sitzung herzustellen:
Session session = new Session.Builder(this, APPLICATION_ID, mySessionId)
.connectionEventsSuppressed(true)
.build();
session.connect(myToken);
Rufen Sie nicht die Session.setConnectionListener(ConnectionListener listener) Methode (um einen ConnectionListener für das Session-Objekt zu setzen); der Aufruf dieser Methode hat keine Auswirkungen. Das Unterdrücken von Verbindungsereignissen verhindert, dass die ConnectionListener-Methoden aufgerufen werden, wenn andere Clients eine Verbindung mit der Sitzung herstellen oder die Verbindung trennen. (Außerdem sendet der Vonage-Server diese Ereignisse nicht an den Android-Client).
Unterdrückung von Verbindungsereignissen mit dem Windows SDK
Um eine Verbindung zur Sitzung herzustellen, instanziieren Sie ein Sitzungsobjekt mithilfe der Klasse Session.Builder. Übergeben Sie Ihre App-ID und die Sitzungs-ID an die Session.Builder() Konstruktor, und setzen Sie die connectionEventsSuppressed Parameter zu true. Rufen Sie dann die Connect() Methode des Session-Objekts, um eine Verbindung zur Sitzung herzustellen:
Session = new Session.Builder(Context.Instance, APPLICATION_ID, SESSION_ID, true).Build();
// Set event handlers for the Session object. Then, connect:
Session.Connect(TOKEN);
Durch die Unterdrückung von Verbindungsereignissen wird verhindert, dass diese Ereignisse ausgelöst werden, wenn andere Clients eine Verbindung zur Sitzung herstellen oder die Verbindung trennen. (Außerdem sendet der Vonage-Server diese Ereignisse nicht an den Windows-Client).
Unterdrückung von Verbindungsereignissen mit dem Linux-SDK
Um sich mit der Sitzung zu verbinden, instanziieren Sie eine otc_session_settings Struktur und geben Sie Ihre App-ID und Ihre Vonage-Sitzungs-ID an. Rufen Sie dann die otc_session_settings_set_connection_events_suppressed() Funktion, wobei die Instanz otc_session_settings als erster Parameter übergeben wird, und OTC_TRUE als zweite, suppressParameter. Rufen Sie dann die otc_session_new_with_settings() Funktion, um die otc_session-Struktur zu erstellen. Dann Funktion zur Verbindung mit der Sitzung:
otc_session_settings *session_settings = otc_session_settings_new();
otc_session_settings_set_connection_events_suppressed(session_settings, OTC_TRUE);
otc_session_callbacks session_callbacks = {0};
// Set the callback functions of the otc_session_callbacks instance.
otc_session *session = otc_session_new_with_settings(APPLICATION_ID, SESSION_ID,
&session_callbacks,
session_settings);
otc_session_connect(session, TOKEN);
Stellen Sie nicht die otc_session_callbacks.on_connection_created oder otc_session_callbacks.on_connection_dropped Callback-Funktionen. Durch die Unterdrückung von Verbindungsereignissen wird verhindert, dass diese Callback-Funktionen aufgerufen werden, wenn andere Clients eine Verbindung zur Sitzung herstellen oder die Verbindung trennen. (Außerdem sendet der Vonage-Server diese Ereignisse nicht an den Linux-Client).
Erkennung der Überschreitung von Verbindungs- und Streamgrenzen
Die Client-SDKs enthalten Fehlermeldungen, die darauf hinweisen, wenn ein Client versucht, eine Verbindung zu einer Sitzung herzustellen oder einen Stream zu abonnieren, wenn das Limit für die Verbindung (15.000) oder den Stream (15.000) für die Sitzung überschritten wurde.
Wenn der Client keine Verbindung zu einer Sitzung herstellen oder einen Stream abonnieren kann, weil das Verbindungs- oder Stream-Limit erreicht wurde, können Sie dem Client eine Live-Streaming-Übertragung der Sitzung (falls Sie eine solche eingerichtet haben).
Verbindungs- und Stream-Limit-Fehler in der OpenTok.js (Web)
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, während das Verbindungslimit für eine Sitzung (15.000 gleichzeitig verbundene Clients) erreicht ist, wird der Completion-Handler für die Session.connect() Methode wird mit der error auf ein Error-Objekt mit dem Parameter name Eigenschaft eingestellt auf 'OT_CONNECTION_LIMIT_EXCEEDED'.
Wenn Sie versuchen, einen Stream zu abonnieren, während das Stream-Limit für eine Sitzung überschritten wurde, wird der Abschluss-Handler für die Session.subscribe() Methode wird mit der error auf ein Error-Objekt mit dem Parameter name Eigenschaft eingestellt auf 'OT_STREAM_LIMIT_EXCEEDED'.
Verbindungs- und Stream-Limit-Fehler im Android SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, wenn das Verbindungslimit für eine Sitzung (15.000 gleichzeitig verbundene Clients) erreicht wurde, wird die Session.SessionListener.onError(session, error) Methode wird mit der error auf ein Error-Objekt gesetzt, dessen Code-Eigenschaft auf SessionConnectionLimitExceeded.
Wenn Sie versuchen, einen Stream zu abonnieren, wenn das Stream-Limit für eine Sitzung erreicht ist, wird die Session.SubscriberListener.onError(subscriber, error) Methode wird mit der error auf ein Error-Objekt gesetzt, dessen Code-Eigenschaft auf SubscriberStreamLimitExceeded.
Videoqualität bei interaktiven Live-Videoübertragungen
Groß angelegte Sitzungen profitieren von der skalierbaren Videofunktion. Mit dieser Funktion können abonnierte Endpunkte je nach Netzwerk- und CPU-Bedingungen unterschiedliche Videoauflösungen und Bildraten nutzen. Diese Funktion ist im Vonage iOS SDK (auf bestimmten Geräten), dem Android SDK (auf bestimmten Geräten), dem Windows SDK und OpenTok.js in Chrome und Safari verfügbar.
Verbindungs- und Stream-Limit-Fehler im iOS SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, wenn das Verbindungslimit für eine Sitzung (15.000 gleichzeitig verbundene Clients) erreicht wurde, wird die [SessionDelegate session:didFailWithError:] Nachricht wird mit der error auf ein OTError-Objekt mit der Option code Eigenschaft eingestellt auf OTSessionConnectionLimitExceeded.
Wenn Sie versuchen, einen Stream zu abonnieren, wenn das Stream-Limit für eine Sitzung erreicht ist, wird die [OTSubscriberKitDelegate subscriber:didFailWithError:] Nachricht wird mit der error auf ein OTError-Objekt mit der Option code Eigenschaft eingestellt auf OTSubscriberStreamLimitExceeded.
Verbindungs- und Stream-Limit-Fehler im Windows-SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, wenn das Verbindungslimit für eine Sitzung (15.000 gleichzeitig verbundene Clients) erreicht wurde, wird die Session Objekt sendet eine Error Ereignis, das mit dem ErrorCode eingestellt auf ErrorCode.SessionConnectionLimitExceeded.
Wenn Sie versuchen, einen Stream zu abonnieren, wenn das Stream-Limit für eine Sitzung erreicht wurde, sendet das Subscriber-Objekt ein Fehlerereignis mit dem ErrorCode auf ein OTError-Objekt mit der Option code Eigenschaft eingestellt auf ErrorCode.SubscriberStreamLimitExceeded.
Verbindungs- und Stream-Limit-Fehler im Linux-SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, wenn das Verbindungslimit für eine Sitzung (15.000 gleichzeitig verbundene Clients) erreicht wurde, wird die otc_session_callbacks.on_error() Funktion wird mit dem Fehlerparameter aufgerufen, der auf OTC_SESSION_CONNECTION_LIMIT_EXCEEDED.
Wenn Sie versuchen, einen Stream zu abonnieren, wenn das Stream-Limit für eine Sitzung erreicht ist, wird die otc_subscriber_callbacks.on_error() Funktion wird mit der error Parameter eingestellt auf OTC_SUBSCRIBER_STREAM_LIMIT_EXCEEDED.
Preisgestaltung für interaktive Live-Übertragungen
Für interaktive Live-Videos gelten die gleichen Preise für abonnierte Minuten wie für andere Sitzungen. Für Details, siehe Preisgestaltung.