Interaktive Live-Videoübertragungen
Mit Vonage Video API Broadcast können Sie Live-Videositzungen mit vielen Zuschauern teilen.
Diese Seite enthält die folgenden Abschnitte:
- So entwickeln Sie Ihre App für die Unterstützung interaktiver Live-Videoübertragungen
- Videoqualität bei interaktiven Live-Videoübertragungen
- Preisgestaltung für interaktive Live-Übertragungen
In einer interaktiven Live-Videoübertragung können zahlreiche Teilnehmer in Echtzeit miteinander kommunizieren, indem sie ihre Streams in der Sitzung veröffentlichen und die Streams anderer Teilnehmer abonnieren. Eine interaktive Live-Videoübertragung kann insgesamt bis zu 15.000 Teilnehmer unterstützen, abhängig von der Anzahl der aktiven Sender in der Sitzung.
Die folgende Tabelle gibt Aufschluss über die Anzahl der Teilnehmer an der interaktiven Live-Übertragung, die alle Publisher der Sitzung abonnieren können. Bei den Teilnehmern der interaktiven Live-Übertragung handelt es sich um Abonnenten mit geringer Latenz, die ausschließlich Lesezugriff auf alle veröffentlichten Streams haben und die interaktive Live-Übertragung verfolgen. Die Publisher der Sitzung können als Gastgeber der Übertragung betrachtet werden, und als Gastgeber können sie auch die anderen veröffentlichten Streams abonnieren. Mit steigender Anzahl von Publishern pro Sitzung verringert sich auch die Anzahl der gleichzeitigen Zuschauer aller veröffentlichten Streams.
Basierend auf der folgenden Tabelle können beispielsweise, wenn in der Sitzung 1 oder 2 veröffentlichte Streams vorhanden sind, bis zu 15.000 Teilnehmer beide veröffentlichten Streams mit Echtzeit-Latenz als Live-Übertragungsteilnehmer verfolgen. Ebenso können, wenn in der Sitzung 3 veröffentlichte Streams vorhanden sind, bis zu 13.000 Teilnehmer alle 3 veröffentlichten Streams mit Echtzeit-Latenz als Live-Übertragungsteilnehmer verfolgen.
| **Anzahl der Verlage *** | Anzahl der gleichzeitig aktiven Teilnehmer pro Sitzung (die Teilnehmer abonnieren alle Sender) |
|---|---|
| 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 Bildschirmfreigabe-Streams.
Wenn die Anzahl der Teilnehmer an der Sitzung größer ist als der in der Tabelle angegebene Wert, sollten Sie die Live-Streaming-Funktion nutzen (siehe Live-Streaming Sendungen).
Ebenso unterstützen OpenTok-Sitzungen bis zu 15.000 Clients, die sich gleichzeitig mit einer Sitzung verbinden können.
Anwendungsentwickler sollten die Plattformgrenzen in der Anwendung verwalten. Siehe den nächsten Abschnitt.
Die Funktion für interaktive Live-Videoübertragungen steht nur für geroutete Sitzungen zur Verfügung (Sitzungen, die den OpenTok Media Router nutzen). Weitere Informationen finden Sie unter Der OpenTok Media Router und die Medien- Modi.
Interaktive Live-Videoübertragungen unterstützen HD-Video (sowie Video mit niedrigerer Auflösung), sofern 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 nutzen sollten, um eine große Anzahl von Clients zu unterstützen, die eine Verbindung zu OpenTok-Sitzungen herstellen. Lesen Sie dazu die folgenden Abschnitte:
- Unterdrückung von Verbindungsereignissen
- Erkennen, wann Verbindungs- und Stream-Limits überschritten werden
Unterdrückung von Verbindungsereignissen
Wenn sich eine große Anzahl von Clients mit einer Sitzung verbindet, ist es wichtig, die Verbindungsereignisse in den Clients zu deaktivieren. Zu diesen Ereignissen gehören solche, die ausgelöst werden, wenn andere Clients eine Verbindung zur Sitzung herstellen oder diese trennen. Die meisten Clients müssen diese Ereignisse nicht verarbeiten, und durch deren Deaktivierung wird verhindert, dass Clients Leistungseinbußen (beispielsweise beim Veröffentlichen oder Abonnieren von Audio-Video-Streams) erleiden, die durch diese zahlreichen Ereignisse 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 OpenTok-Client-SDKs (für Web, iOS und Android) eine API-Erweiterung zum Deaktivieren von Verbindungsereignissen auf dem Client. Diese werden in den folgenden Abschnitten beschrieben:
-
Unterdrücken von Verbindungsereignissen mit dem OpenTok Android SDK
-
Unterdrücken von Verbindungsereignissen mit dem OpenTok iOS SDK
-
Unterdrücken von Verbindungsereignissen mit dem OpenTok Windows SDK
-
Unterdrücken von Verbindungsereignissen mit dem OpenTok Linux SDK
Obwohl Sie in großen Sitzungen auch andere unterstützte OpenTok-Client-Versionen (2.9.0+) verwenden können, werden Verbindungsereignisse bei Clients mit Versionen älter als 2.10.0+ nicht unterdrückt. Bei Clients, die ältere Versionen von OpenTok.js verwenden, kann es aufgrund der hohen Anzahl an Verbindungsereignissen zu Leistungseinbußen kommen.
Unterdrückung von Verbindungsereignissen mit OpenTok.js (web)
Erstellen Sie bei der Initialisierung des Session-Objekts ein Objekt mit dem
connectionEventsSuppressed Eigenschaft eingestellt auf true, und übergebe dieses Objekt als
das options Parameter beim Aufruf des OT.initSession() Methode.
Stellen Sie anschließend eine Verbindung zur Sitzung her:
var props = {connectionEventsSuppressed: true};
var session = OT.initSession(API_KEY, 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 zur Sitzung herstellen oder diese trennen.
(Außerdem sendet der OpenTok-Server diese Ereignisse nicht an den Web-Client.)
(Außerdem sendet der OpenTok-Server diese Ereignisse nicht an den Web-Client.)
Unterdrücken von Verbindungsereignissen mit dem OpenTok 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 der [OTSession initWithApiKey:sessionId:delegate:settings:] Methode zum
Initialisieren des OTSession-Objekts:
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.connectionEventsSuppressed = YES;
OTSession *session = [[OTSession alloc] initWithApiKey:apiKey
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:] und
[SessionDelegate session:connectionCreated:] dass keine Meldungen gesendet werden, wenn
andere Clients eine Verbindung zur Sitzung herstellen oder diese trennen. (Außerdem sendet der OpenTok-
Server diese Ereignisse nicht an den iOS-Client.)
Unterdrücken von Verbindungsereignissen mit dem OpenTok Android SDK
Um eine Verbindung zur Sitzung herzustellen, instanziieren Sie ein `Session.Builder`-Objekt und übergeben Sie dabei
Ihren API-Schlüssel und die OpenTok-Sitzungs-ID. Rufen Sie anschließend die
connectionEventsSuppressed() Methode des Builder-Objekts und übergibt in true.
Rufen Sie die build() Methode zum Erstellen des Session-Objekts. Rufen Sie anschließend die
connect() Methode des Session-Objekts, um eine Verbindung zur Sitzung herzustellen:
Session session = new Session.Builder(this, API_KEY, mySessionId)
.connectionEventsSuppressed(true)
.build();
session.connect(myToken);
Rufen Sie nicht die Session.setConnectionListener(ConnectionListener listener)
Methode (zum Festlegen eines ConnectionListener für das Session-Objekt); der Aufruf dieser
Methode hat keine Auswirkungen. Durch das Unterdrücken von Verbindungsereignissen wird verhindert, dass die
ConnectionListener-Methoden aufgerufen werden, wenn andere Clients eine Verbindung zur Sitzung herstellen oder
diese trennen. (Außerdem sendet der OpenTok-Server diese
Ereignisse nicht an den Android-Client.)
Unterdrücken von Verbindungsereignissen mit dem OpenTok Windows SDK
Um eine Verbindung zur Sitzung herzustellen, instanziieren Sie ein Session-Objekt mithilfe der
Session.Builder Klasse. Übergeben Sie Ihren API-Schlüssel und die OpenTok-Sitzungs-ID an
die Session.Builder() Konstruktor, und setzen Sie die connectionEventsSuppressed
Parameter zu true. Rufen Sie dann die Connect() Methode des Session-Objekts
zum Herstellen einer Verbindung zur Sitzung:
Session = new Session.Builder(Context.Instance, API_KEY, SESSION_ID, true).Build();
// Set event handlers for the Session object. Then, connect:
Session.Connect(TOKEN);
Stellen Sie nicht die Session.StreamReceived oder Session.StreamDropped Ereignisbehandler,
Durch das Unterdrücken von Verbindungsereignissen wird verhindert, dass diese Ereignisse ausgelöst werden, wenn andere Clients
eine Verbindung zur Sitzung herstellen oder diese trennen. (Außerdem sendet der OpenTok-Server diese
Ereignisse nicht an den Windows-Client.)
Unterdrücken von Verbindungsereignissen mit dem OpenTok Linux SDK
Um sich mit der Sitzung zu verbinden, instanziieren Sie eine otc_session_settings struct,
wobei Sie Ihren API-Schlüssel und die OpenTok-Sitzungs-ID übergeben. Rufen Sie anschließend die
otc_session_settings_set_connection_events_suppressed() Funktion, wobei
die otc_session_settings Instanz als ersten Parameter und OTC_TRUE
als das zweite, suppressParameter. Rufen Sie dann die otc_session_new_with_settings()
Funktion zum Erstellen der Struktur „otc_session“. Anschließend Funktion zum Herstellen einer Verbindung zur 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(API_KEY, 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 das Unterdrücken von
Verbindungsereignissen wird verhindert, dass diese Callback-Funktionen aufgerufen werden, wenn
andere Clients eine Verbindung zur Sitzung herstellen oder diese trennen. (Außerdem sendet der OpenTok-Server
diese Ereignisse nicht an den Linux-Client.)
Erkennung der Überschreitung von Verbindungs- und Streamgrenzen
Die OpenTok-Client-SDKs enthalten Fehlermeldungen, die anzeigen, wenn ein Client versucht, eine Verbindung zu einer Sitzung herzustellen oder einen Stream zu abonnieren, obwohl das Verbindungslimit (15.000) oder das Stream-Limit (15.000) für die Sitzung überschritten wurde. Diese werden in den folgenden Abschnitten beschrieben:
-
Fehler bei der Verbindung und bei der Stream-Begrenzung in OpenTok.js
-
Fehler bei der Verbindung und beim Stream-Limit im OpenTok Android SDK
-
Fehler bei der Verbindung und beim Stream-Limit im OpenTok iOS SDK
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 den Client dazu veranlassen, eine Live-Streaming Übertragung der Sitzung (falls Sie eine solche implementiert haben).
Fehler bei der Verbindung und beim Stream-Limit in OpenTok.js (Web)
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, obwohl das Verbindungslimit für diese Sitzung (15.000 gleichzeitig
verbundene Clients) bereits erreicht ist, wird der Abschluss-Handler für die Session.connect() Die Methode
wird mit dem error auf ein Error-Objekt mit dem Parameter name Eigenschaft gesetzt auf
'OT_CONNECTION_LIMIT_EXCEEDED'.
Wenn Sie versuchen, einen Stream zu abonnieren, obwohl das Stream-Limit für eine Sitzung
bereits überschritten wurde, wird der Abschluss-Handler für den Session.subscribe()
Die Methode wird mit dem error auf ein Error-Objekt mit dem Parameter name Eigenschaft gesetzt auf
'OT_STREAM_LIMIT_EXCEEDED'.
Fehler bei der Verbindung und beim Stream-Limit im OpenTok Android SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, obwohl das Verbindungslimit für diese Sitzung (15.000 gleichzeitig
verbundene Clients) bereits erreicht ist, wird die Session.SessionListener.onError(session, error) Die Methode
wird mit dem error Parameter, der auf ein OpenTokError-Objekt mit dem code Eigenschaft gesetzt auf
SessionConnectionLimitExceeded.
Wenn Sie versuchen, einen Stream zu abonnieren, obwohl das Stream-Limit für eine Sitzung
bereits erreicht ist, wird die Session.SubscriberListener.onError(subscriber, error)
Die Methode wird mit dem error Parameter, der auf ein OpenTokError-Objekt mit dem code Eigenschaft
auf SubscriberStreamLimitExceeded.
Fehler bei der Verbindung und beim Stream-Limit im OpenTok iOS SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, obwohl das Verbindungslimit für diese Sitzung (15.000 gleichzeitig
verbundene Clients) bereits erreicht ist, wird die [SessionDelegate session:didFailWithError:] Die Nachricht wird
mit dem error auf ein OTError-Objekt mit der Option code Eigenschaft gesetzt auf
OTSessionConnectionLimitExceeded .
Wenn Sie versuchen, einen Stream zu abonnieren, obwohl das Stream-Limit für eine Sitzung
bereits erreicht ist, wird die [OTSubscriberKitDelegate subscriber:didFailWithError:]
Die Nachricht wird mit dem error auf ein OTError-Objekt mit der Option code Eigenschaft gesetzt auf
OTSubscriberStreamLimitExceeded.
Fehler bei der Verbindung und beim Stream-Limit im OpenTok Windows SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, obwohl das Verbindungslimit für diese Sitzung (15.000 gleichzeitig
verbundene Clients) bereits erreicht ist, wird die Session Objekt sendet eine Error Ereignis
gesendet mit dem ErrorCode eingestellt auf ErrorCode.SessionConnectionLimitExceeded.
Wenn Sie versuchen, einen Stream zu abonnieren, obwohl das Stream-Limit für eine Sitzung
bereits erreicht ist, wird die Subscriber Objekt sendet eine Error Veranstaltung
mit dem ErrorCode auf ein OTError-Objekt mit der Option code Eigenschaft gesetzt auf
ErrorCode.SubscriberStreamLimitExceeded.
Fehler bei der Verbindung und beim Stream-Limit im OpenTok Linux SDK
Wenn Sie versuchen, eine Verbindung zu einer Sitzung herzustellen, obwohl das Verbindungslimit für diese Sitzung (15.000 gleichzeitig
verbundene Clients) bereits erreicht ist, wird die otc_session_callbacks.on_error() Die Funktion wird
mit dem error Parameter eingestellt auf OTC_SESSION_CONNECTION_LIMIT_EXCEEDED.
Wenn Sie versuchen, einen Stream zu abonnieren, obwohl das Stream-Limit für eine Sitzung
bereits erreicht ist, wird die otc_subscriber_callbacks.on_error() Die Funktion wird
mit dem error Parameter eingestellt auf OTC_SUBSCRIBER_STREAM_LIMIT_EXCEEDED .
Videoqualität bei interaktiven Live-Videoübertragungen
Großangelegte Sitzungen profitieren von der skalierbaren Videofunktion von OpenTok. Mit dieser Funktion können Endpunkte je nach Netzwerk- und CPU-Bedingungen unterschiedliche Videoauflösungen und Bildraten nutzen. Diese Funktion ist im OpenTok iOS SDK (auf bestimmten Geräten), im OpenTok Android SDK (auf bestimmten Geräten), im OpenTok Windows SDK sowie in OpenTok.js in Chrome und Safari verfügbar.
Preisgestaltung für interaktive Live-Übertragungen
Für interaktive Live-Videos gilt dieselbe Abrechnung nach abonnierten Minuten wie für andere OpenTok-Sitzungen. Weitere Informationen finden Sie unter Preisgestaltung.