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:

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

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:

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:

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.