Retransmisiones de vídeo interactivas en directo
En una emisión de vídeo interactiva en directo, un gran número de clientes pueden comunicarse en directo publicando y suscribiéndose a los flujos de los demás en la sesión. Una sesión de difusión de vídeo interactivo en directo puede admitir hasta 15.000 participantes totales en la sesión, en función del número de editores activos en la sesión.
En la tabla siguiente se detalla el número de participantes en la difusión interactiva en directo que pueden suscribirse a todos los editores de la sesión. Los participantes en la difusión interactiva son los suscriptores de baja latencia y sólo visualización de todos los flujos publicados y los espectadores de la difusión interactiva en directo. Los editores de la sesión pueden considerarse los anfitriones de la emisión, y como anfitriones también pueden suscribirse a los demás flujos publicados. A medida que aumenta el número de editores por sesión, también se reduce el número de espectadores simultáneos de todos los flujos publicados.
Por ejemplo, según la tabla siguiente, cuando hay 1 o 2 secuencias publicadas en la sesión, hasta 15.000 participantes pueden ver ambas secuencias publicadas con latencia en tiempo real como participantes de retransmisión en directo. Del mismo modo, cuando hay 3 secuencias publicadas en la sesión, hasta 13.000 participantes pueden ver las 3 secuencias publicadas con latencia en tiempo real como participantes de retransmisión en directo.
| Numbers of publishers * (Número de editores) | Interacción simultánea en directo participantes por sesión (los participantes se suscriben a todas las editoriales) |
|---|---|
| 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 |
- Las secuencias publicadas incluyen tanto secuencias con cámara como secuencias con pantalla compartida.
Si el número de participantes en la sesión es superior al valor de la tabla, deberá utilizar la función de retransmisión en directo (véase Retransmisiones en directo).
Del mismo modo, las sesiones admiten hasta 15.000 clientes que se conectan simultáneamente a una sesión.
Los desarrolladores de aplicaciones deben gestionar los límites de la plataforma en la aplicación. Véase la sección siguiente.
La función de transmisión de video interactivo en vivo sólo está disponible para sesiones enrutadas (sesiones que utilizan el enrutador de medios de Vonage). Para obtener más información, consulta La Router de medios y modos de medios.
Las emisiones de vídeo interactivo en directo admiten vídeo HD (así como vídeo de menor resolución) si los recursos del cliente (ancho de banda y CPU) admiten la resolución.
Cómo crear una aplicación que admita emisiones de vídeo interactivo en directo
Hay algunas mejoras de la API que debe utilizar para admitir un gran número de clientes que se conectan a las sesiones. Consulte las secciones siguientes:
Supresión de eventos de conexión
Si un gran número de clientes van a conectarse a una sesión, es importante desactivar los eventos de conexión en los clientes. Estos eventos incluyen los que se envían cuando otros clientes se conectan y desconectan de la sesión. La mayoría de los clientes no necesitan procesar estos eventos, y desactivarlos evita que los clientes incurran en penalizaciones de rendimiento (por ejemplo, al publicar o suscribirse a flujos de audio y vídeo) causadas por estos eventos de gran volumen.
Importante: Para optimizar su aplicación para esta gran escala, asegúrese de utilizar las API de supresión de eventos de conexión descritas aquí.
En la versión 2.10.0 y posteriores, cada uno de los SDK de cliente (para Web, iOS y Android) incluye una mejora de la API para desactivar los eventos de conexión en el cliente.
Aunque puedes utilizar otras versiones de cliente compatibles (2.9.0+) en sesiones grandes, los eventos de conexión no se suprimirán en clientes que utilicen versiones anteriores a 2.10.0+. Los clientes que utilicen versiones anteriores de OpenTok.js pueden ver degradado su rendimiento, debido al gran volumen de eventos de conexión.
Suprimir eventos de conexión con OpenTok.js (web)
Al inicializar el objeto Session, cree un objeto con la propiedad connectionEventsSuppressed con el valor truey pasar ese objeto como options al llamar a la función OT.initSession() método. A continuación, conéctese a la sesión:
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.');
}
});
Esto evita que el objeto Session envíe connectionCreated y connectionDestroyed cuando otros clientes se conectan o desconectan de la sesión. (Además, el servidor de Vonage no envía estos eventos al cliente web).
Supresión de eventos de conexión con el SDK de iOS
Al inicializar un objeto OTSessionSettings, establezca su valor connectionEventsSuppressed propiedad a YES. A continuación, pase ese objeto como settings al llamar a la función [OTSession initWithApiKey:sessionId:delegate:settings:] para inicializar el objeto OTSession:
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.connectionEventsSuppressed = YES;
OTSession *session = [[OTSession alloc] initWithApiKey:applicationId
sessionId:sessionId
delegate:self
Settings:settings];
A continuación, conéctate a la sesión:
OTError* error = nil;
[session connectWithToken:kToken error:&error];
if (error) {
NSLog(@"connect failed with error: (%@)", error);
}
Esto evita que el [SessionDelegate session:connectionCreated:] cuando otros clientes se conectan o desconectan de la sesión. (Además, el servidor de Vonage no envía estos eventos al cliente iOS).
Supresión de eventos de conexión con el SDK de Android
Para conectarse a la sesión, cree un objeto Session.Builder, introduciendo el ID de la aplicación y el ID de la sesión. A continuación, llame al objeto connectionEventsSuppressed() del objeto Builder, introduciendo true. Llame al build() para crear el objeto Session. A continuación, llame al método connect() del objeto Session para conectarse a la sesión:
Session session = new Session.Builder(this, APPLICATION_ID, mySessionId)
.connectionEventsSuppressed(true)
.build();
session.connect(myToken);
No llame al Session.setConnectionListener(ConnectionListener listener) (para establecer un ConnectionListener para el objeto Session); llamar a este método no tendrá ningún efecto. Suprimir los eventos de conexión evita que los métodos ConnectionListener sean llamados cuando otros clientes se conectan o desconectan de la sesión. (Además, el servidor de Vonage no envía estos eventos al cliente de Android).
Supresión de eventos de conexión con el SDK de Windows
Para conectarse a la sesión, instancie un objeto Session utilizando la clase Session.Builder. Introduzca el ID de la aplicación y el ID de la sesión en el campo Session.Builder() y establecer el parámetro connectionEventsSuppressed a true. A continuación, llame al Connect() del objeto Session para conectarse a la sesión:
Session = new Session.Builder(Context.Instance, APPLICATION_ID, SESSION_ID, true).Build();
// Set event handlers for the Session object. Then, connect:
Session.Connect(TOKEN);
No configures los controladores de eventos Session.StreamReceived o Session.StreamDropped, ya que al suprimir los eventos de conexión se evita que estos eventos se activen cuando otros clientes se conectan o desconectan de la sesión. (Además, el servidor de Vonage no envía estos eventos al cliente de Windows).
Supresión de eventos de conexión con el SDK de Linux
Para conectarse a la sesión, cree una instancia otc_session_settings pasando tu ID de aplicación y tu ID de sesión de Vonage. Luego, llama a la estructura otc_session_settings_set_connection_events_suppressed() pasando la instancia otc_session_settings como primer parámetro y OTC_TRUE como el segundo, suppressparámetro. A continuación, llame al parámetro otc_session_new_with_settings() para crear la estructura otc_session. A continuación, función para conectarse a la sesión:
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);
No ajuste el otc_session_callbacks.on_connection_created o otc_session_callbacks.on_connection_dropped funciones de retrollamada. La supresión de eventos de conexión evita que estas funciones de devolución de llamada sean llamadas cuando otros clientes se conectan o desconectan de la sesión. (Además, el servidor de Vonage no envía estos eventos al cliente Linux).
Detección de la superación de los límites de conexión y de flujo
Los SDK de cliente incluyen errores que indican cuándo un cliente está intentando conectarse a una sesión o suscribirse a un flujo cuando se ha superado el límite de conexión (15.000) o de flujo (15.000) para la sesión.
Si el cliente no puede conectarse a una sesión o suscribirse a un flujo porque se ha alcanzado el límite de conexión o de flujo, puede hacer que el cliente vea un icono retransmisión en directo de la sesión (si ha implementado uno).
Errores de conexión y de límite de flujo en OpenTok.js (web)
Si intenta conectarse a una sesión cuando se ha alcanzado el límite de conexión para una sesión (15.000 clientes conectados simultáneamente), el gestor de finalización de la acción Session.connect() con el método error a un objeto Error con el parámetro name con el valor 'OT_CONNECTION_LIMIT_EXCEEDED'.
Si intenta suscribirse a un flujo cuando se ha superado el límite de flujo de una sesión, el gestor de finalización de la acción Session.subscribe() con el método error a un objeto Error con el parámetro name con el valor 'OT_STREAM_LIMIT_EXCEEDED'.
Errores de conexión y de límite de flujo en el SDK de Android
Si intenta conectarse a una sesión cuando se ha alcanzado el límite de conexión para una sesión (15.000 clientes conectados simultáneamente), aparecerá el mensaje Session.SessionListener.onError(session, error) con el método error establecido a un objeto Error con la propiedad code establecida a SessionConnectionLimitExceeded.
Si intenta suscribirse a un flujo cuando se ha alcanzado el límite de flujos para una sesión, se mostrará el mensaje Session.SubscriberListener.onError(subscriber, error) con el método error establecido a un objeto Error con la propiedad code establecida a SubscriberStreamLimitExceeded.
Calidad de vídeo en las emisiones de vídeo interactivo en directo
Las sesiones a gran escala se benefician de la función de vídeo escalable. Con esta función, los puntos finales suscritos pueden consumir diferentes resoluciones de vídeo y velocidades de fotogramas en función de sus condiciones de red y CPU. Esta función está disponible en el SDK de Vonage para iOS (en determinados dispositivos), el SDK de Android (en determinados dispositivos), el SDK de Windows y OpenTok.js en Chrome y Safari.
Errores de conexión y de límite de flujo en el SDK de iOS
Si intenta conectarse a una sesión cuando se ha alcanzado el límite de conexión para una sesión (15.000 clientes conectados simultáneamente), aparecerá el mensaje [SessionDelegate session:didFailWithError:] se envía con el mensaje error a un objeto OTError con el valor code con el valor OTSessionConnectionLimitExceeded.
Si intenta suscribirse a un flujo cuando se ha alcanzado el límite de flujos para una sesión, se mostrará el mensaje [OTSubscriberKitDelegate subscriber:didFailWithError:] se envía con el mensaje error a un objeto OTError con el valor code con el valor OTSubscriberStreamLimitExceeded.
Errores de conexión y de límite de flujo en el SDK de Windows
Si intenta conectarse a una sesión cuando se ha alcanzado el límite de conexión para una sesión (15.000 clientes conectados simultáneamente), aparecerá el mensaje Session envía un Error enviado con el evento ErrorCode ajustado a ErrorCode.SessionConnectionLimitExceeded.
Si intenta suscribirse a un flujo cuando se ha alcanzado el límite de flujo para una sesión, el objeto Subscriber envía un evento Error con el valor ErrorCode a un objeto OTError con el valor code con el valor ErrorCode.SubscriberStreamLimitExceeded.
Errores de conexión y de límite de flujo en el SDK de Linux
Si intenta conectarse a una sesión cuando se ha alcanzado el límite de conexión para una sesión (15.000 clientes conectados simultáneamente), aparecerá el mensaje otc_session_callbacks.on_error() con el parámetro de error establecido en OTC_SESSION_CONNECTION_LIMIT_EXCEEDED.
Si intenta suscribirse a un flujo cuando se ha alcanzado el límite de flujos para una sesión, se mostrará el mensaje otc_subscriber_callbacks.on_error() con la función error establecido en OTC_SUBSCRIBER_STREAM_LIMIT_EXCEEDED.
Precios de las retransmisiones interactivas en directo
El vídeo interactivo en directo utiliza el mismo precio por minuto suscrito que las demás sesiones. Para más información, consulte Precios.