Retransmisiones de vídeo interactivas en directo

La función de retransmisión de la Video API de Vonage te permite compartir sesiones de vídeo en directo con numerosos espectadores.

Esta página incluye las siguientes secciones:

En una retransmisión de vídeo interactiva en directo, un gran número de clientes puede comunicarse en directo publicando y suscribiéndose a las transmisiones de los demás participantes en la sesión. Una sesión de retransmisión de vídeo interactiva en directo puede admitir hasta un total de 15 000 participantes, en función del número de emisores activos en la sesión.

La tabla siguiente detalla el número de participantes en la retransmisión interactiva en directo que pueden suscribirse a todos los emisores de la sesión. Los participantes en la retransmisión interactiva son los suscriptores de baja latencia, con acceso solo de visualización, de todas las transmisiones publicadas y los espectadores de la retransmisión interactiva en directo. Los editores de la sesión pueden considerarse los anfitriones de la retransmisión y, como tales, también pueden suscribirse a las demás transmisiones publicadas. A medida que aumenta el número de editores por sesión, también se reduce el número de espectadores simultáneos de todas las transmisiones publicadas.

Por ejemplo, según la tabla que figura a continuación, cuando hay 1 o 2 transmisiones publicadas en la sesión, hasta 15 000 participantes pueden ver ambas transmisiones publicadas con latencia en tiempo real como participantes de la retransmisión en directo. Del mismo modo, cuando hay 3 transmisiones publicadas en la sesión, hasta 13 000 participantes pueden ver las 3 transmisiones publicadas con latencia en tiempo real como participantes en la retransmisión en directo.

**Número de editoriales *** Número de participantes interactivos en directo simultáneos por sesión (los participantes están suscritos a todos los emisores)
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 retransmisiones publicadas incluyen tanto las realizadas con cámara como las de pantalla compartida.

Si el número de participantes en la sesión es superior al valor que figura en la tabla, deberías utilizar la función de retransmisión en directo (véase Retransmisiones en directo).

Del mismo modo, las sesiones de OpenTok admiten hasta 15 000 clientes conectados 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 retransmisión de vídeo interactiva en directo solo está disponible para sesiones enrutadas (sesiones que utilizan el OpenTok Media Router). Para obtener más información, consulta El enrutador multimedia de OpenTok y los modos multimedia.

Las retransmisiones de vídeo interactivas en directo admiten vídeo en alta definición (así como vídeo de menor resolución) siempre que los recursos del cliente (ancho de banda y CPU) permitan dicha resolución.

Cómo crear una aplicación que admita emisiones de vídeo interactivo en directo

Hay algunas mejoras en la API que deberías utilizar para dar soporte a un gran número de clientes que se conectan a sesiones de OpenTok. Consulta las siguientes secciones:

Supresión de eventos de conexión

Si se va a conectar un gran número de clientes a una sesión, es importante desactivar los eventos de conexión en los clientes. Estos eventos incluyen aquellos que se envían cuando otros clientes se conectan o se desconectan de la sesión. La mayoría de los clientes no necesitan procesar estos eventos, y desactivarlos evita que los clientes sufran pérdidas de rendimiento (por ejemplo, al publicar o suscribirse a flujos de audio y vídeo) causadas por este elevado volumen de eventos.

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 de OpenTok (para web, iOS y Android) incluye una mejora de la API que permite desactivar los eventos de conexión en el cliente. Estas mejoras se describen en las siguientes secciones:

Aunque se pueden utilizar otras versiones compatibles del cliente OpenTok (2.9.0+) en sesiones de gran envergadura, los eventos de conexión no se suprimirán en los clientes que utilicen versiones anteriores a la 2.10.0+. Los clientes que utilicen versiones anteriores de OpenTok.js pueden experimentar una disminución del rendimiento, debido al elevado volumen de eventos de conexión.

Cómo suprimir eventos de conexión con OpenTok.js (web)

Al inicializar el objeto Session, crea un objeto con el connectionEventsSuppressed con el valor true, y pasar ese objeto como el options al llamar a la función OT.initSession() método. A continuación, conéctate a la sesión:

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.');
  }
});

Esto evita que el objeto Session envíe connectionCreated y connectionDestroyed eventos cuando otros clientes se conectan o se desconectan de la sesión. (Además, el servidor de OpenTok no envía estos eventos al cliente web.)

Cómo suprimir eventos de conexión con el SDK de OpenTok para iOS

Al inicializar un objeto OTSessionSettings, configura su connectionEventsSuppressed propiedad a YES. A continuación, pase ese objeto como settings parámetro al llamar a la [OTSession initWithApiKey:sessionId:delegate:settings:] método para inicializar el objeto OTSession:

OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.connectionEventsSuppressed = YES;

OTSession *session = [[OTSession alloc] initWithApiKey:apiKey
                                        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:] y [SessionDelegate session:connectionCreated:] que se envíen mensajes cuando otros clientes se conecten o se desconecten de la sesión. (Además, el servidor de OpenTok no envía estos eventos al cliente de iOS.)

Cómo suprimir eventos de conexión con el SDK de OpenTok para Android

Para conectarte a la sesión, crea un objeto `Session.Builder` y pásale tu clave de API y el ID de sesión de OpenTok. A continuación, llama a la connectionEventsSuppressed() del objeto Builder, introduciendo true. Llama al build() método para crear el objeto Session. A continuación, llama a la función connect() del objeto Session para conectarse a la sesión:

Session session = new Session.Builder(this, API_KEY, mySessionId)
                    .connectionEventsSuppressed(true)
                    .build();

session.connect(myToken);

No llames al Session.setConnectionListener(ConnectionListener listener) método (para establecer un ConnectionListener para el objeto Session); llamar a este método no tendrá ningún efecto. Al suprimir los eventos de conexión se evita que se llamen los métodos de ConnectionListener cuando otros clientes se conecten o se desconecten de la sesión. (Además, el servidor de OpenTok no envía estos eventos al cliente de Android.)

Cómo suprimir eventos de conexión con el SDK de OpenTok para Windows

Para conectarte a la sesión, crea una instancia del objeto Session utilizando el Session.Builder clase. Introduce tu clave API y el ID de sesión de OpenTok en el Session.Builder() y establecer el parámetro connectionEventsSuppressed parámetro a true. A continuación, llame al Connect() método del objeto Session para conectarse a la sesión:

Session = new Session.Builder(Context.Instance, API_KEY, SESSION_ID, true).Build();
// Set event handlers for the Session object. Then, connect:
Session.Connect(TOKEN);

No ajuste el Session.StreamReceived o Session.StreamDropped controladores de eventos, La supresión de los eventos de conexión impide que estos eventos se generen cuando otros clientes se conectan o se desconectan de la sesión. (Además, el servidor de OpenTok no envía estos eventos al cliente de Windows.)

Cómo suprimir eventos de conexión con el SDK de OpenTok para Linux

Para conectarse a la sesión, cree una instancia otc_session_settings struct, introduciendo tu clave API y el ID de sesión de OpenTok. A continuación, llama a la función otc_session_settings_set_connection_events_suppressed() función, pasandole el otc_session_settings instancia como primer parámetro, y OTC_TRUE en segundo lugar, suppressparámetro. A continuación, llame al parámetro otc_session_new_with_settings() Función 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(API_KEY, 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 devolución de llamada. Al suprimir los eventos de conexión, se evita que estas funciones de devolución de llamada se activen cuando otros clientes se conectan o se desconectan de la sesión. (Además, el servidor de OpenTok no envía estos eventos al cliente de Linux.)

Detección de cuándo se superan los límites de conexión y de flujo

Los SDK de cliente de OpenTok incluyen errores que indican cuándo un cliente intenta conectarse a una sesión o suscribirse a una transmisión cuando se ha superado el límite de conexiones (15 000) o de transmisiones (15 000) de la sesión. Estos se describen en las siguientes secciones:

Si el cliente no puede conectarse a una sesión o suscribirse a una transmisión porque se ha alcanzado el límite de conexiones o de transmisiones, puedes hacer que el cliente vea un retransmisión en directo emisión de la sesión (si has implementado una).

Errores de conexión y de límite de flujo en OpenTok.js (web)

Si intentas conectarte a una sesión cuando se ha alcanzado el límite de conexiones de dicha sesión (15 000 clientes conectados simultáneamente), el controlador de finalización de la Session.connect() El método se invoca con el error a un objeto Error con el parámetro name propiedad establecida en 'OT_CONNECTION_LIMIT_EXCEEDED'.

Si intentas suscribirte a un flujo cuando se ha superado el límite de flujos de una sesión, el controlador de finalización del Session.subscribe() El método se invoca con el error a un objeto Error con el parámetro name propiedad establecida en 'OT_STREAM_LIMIT_EXCEEDED'.

Errores de conexión y de límite de flujos en el SDK de OpenTok para Android

Si intentas conectarte a una sesión cuando se ha alcanzado el límite de conexiones de dicha sesión (15 000 clientes conectados simultáneamente), el Session.SessionListener.onError(session, error) El método se invoca con el error parámetro establecido en un objeto OpenTokError con el code propiedad establecida en SessionConnectionLimitExceeded.

Si intentas suscribirte a un flujo cuando se ha alcanzado el límite de flujos de una sesión, el Session.SubscriberListener.onError(subscriber, error) El método se invoca con el error parámetro establecido en un objeto OpenTokError con el code propiedad establecida en SubscriberStreamLimitExceeded.

Errores de conexión y de límite de transmisiones en el SDK de OpenTok para iOS

Si intentas conectarte a una sesión cuando se ha alcanzado el límite de conexiones de dicha sesión (15 000 clientes conectados simultáneamente), el [SessionDelegate session:didFailWithError:] El mensaje se envía con el error a un objeto OTError con el valor code propiedad establecida en OTSessionConnectionLimitExceeded .

Si intentas suscribirte a un flujo cuando se ha alcanzado el límite de flujos de una sesión, el [OTSubscriberKitDelegate subscriber:didFailWithError:] El mensaje se envía con el error a un objeto OTError con el valor code propiedad establecida en OTSubscriberStreamLimitExceeded.

Errores de conexión y de límite de flujos en el SDK de OpenTok para Windows

Si intentas conectarte a una sesión cuando se ha alcanzado el límite de conexiones de dicha sesión (15 000 clientes conectados simultáneamente), el Session envía un Error evento enviado con el ErrorCode ajustado a ErrorCode.SessionConnectionLimitExceeded.

Si intentas suscribirte a un flujo cuando se ha alcanzado el límite de flujos de una sesión, el Subscriber envía un Error evento con el ErrorCode a un objeto OTError con el valor code propiedad establecida en ErrorCode.SubscriberStreamLimitExceeded.

Errores de conexión y de límite de flujos en el SDK de OpenTok para Linux

Si intentas conectarte a una sesión cuando se ha alcanzado el límite de conexiones de dicha sesión (15 000 clientes conectados simultáneamente), el otc_session_callbacks.on_error() se llama a la función con el error establecido en OTC_SESSION_CONNECTION_LIMIT_EXCEEDED.

Si intentas suscribirte a un flujo cuando se ha alcanzado el límite de flujos de una sesión, el otc_subscriber_callbacks.on_error() se llama a la función con el error establecido en OTC_SUBSCRIBER_STREAM_LIMIT_EXCEEDED .

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 de OpenTok. Con esta función, los terminales suscritos pueden utilizar diferentes resoluciones de vídeo y frecuencias de fotogramas en función de las condiciones de su red y de su CPU. Esta función está disponible en el SDK de OpenTok para iOS (en determinados dispositivos), el SDK de OpenTok para Android (en determinados dispositivos), el SDK de OpenTok para Windows y OpenTok.js en Chrome y Safari.

Precios de las retransmisiones interactivas en directo

El vídeo interactivo en directo aplica la misma tarifa por minuto de suscripción que se utiliza en otras sesiones de OpenTok. Para obtener más información, consulta Precios.