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:
- Cómo desarrollar tu aplicación para que admita retransmisiones de vídeo interactivas en directo
- Calidad de imagen en las retransmisiones de vídeo interactivas en directo
- Precios de las retransmisiones interactivas en directo
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:
-
Cómo suprimir eventos de conexión con el SDK de OpenTok para Android SDK
-
Cómo suprimir eventos de conexión con el SDK de OpenTok para iOS SDK
-
Supresión de eventos de conexión con el SDK de OpenTok para Windows SDK
-
Supresión de eventos de conexión con el SDK de OpenTok para Linux SDK
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:
-
Errores de conexión y de límite de transmisiones en el SDK de OpenTok para Android SDK
-
Errores de conexión y de límite de transmisiones en el SDK de OpenTok para iOS SDK
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.