Retransmisiones en directo
La función de transmisión en vivo de Video API de Vonage te permite transmitir una sesión de video a una gran audiencia usando la transmisión en vivo HTTP (HLS) o una transmisión RTMP.
Pueden ver simultáneamente un flujo HLS más clientes que los que pueden ver un flujo sesión de vídeo interactiva en directo. Por ejemplo, puede proporcionar un flujo HLS a un cliente si la sesión ha alcanzado el límite de 15.000 conexiones para emisiones interactivas en directo. Los flujos HLS admiten un número ilimitado de espectadores. Los flujos RTMP están limitados por el número de espectadores que admite el proveedor RTMP.
Puede utilizar la función de transmisión RTMP para proporcionar una transmisión de vídeo a una plataforma que admita transmisiones RTMP, como YouTube Live o Facebook.
Además, los clientes que no admiten WebRTC pueden ver el flujo HLS o RTMP.
Una emisión puede incluir hasta 16 flujos de vídeo de la sesión (y hasta 50 flujos de audio). Si la sesión incluye más de 16 secuencias de vídeo simultáneamente, las secuencias adicionales no se incluirán en la emisión.
Un HLS se retrasa entre 15 y 20 segundos con respecto a los flujos en directo de la sesión. Durante el retraso inicial, el flujo de emisión no está disponible. No proporcione la URL de emisión a los clientes hasta que el flujo HLS o RTMP esté disponible.
Para una transmisión RTMP, la plataforma de Vonage introduce una latencia de aproximadamente 5 segundos. Sin embargo, cada plataforma de entrega RTMP (como YouTube Live o Facebook) añadirá una latencia adicional basada en su procesamiento del vídeo antes de publicarlo.
La función de transmisión por secuencias HLS y RTMP sólo está disponible para sesiones enrutadas (sesiones que utilizan el enrutador de medios de Vonage). Para obtener más información, consulta El router de medios y los modos de medios de Vonage.
La reproducción HLS no es compatible con todos los navegadores. Sin embargo, hay una serie de plugins, tales como Flowplayerque ofrecen compatibilidad entre navegadores (uso de Flash Player en navegadores que no ofrecen compatibilidad directa con HLS).
Los flujos RTMP de Vonage tienen las siguientes especificaciones:
- Códec de vídeo H.264 baseline, nivel 3.1
- Resolución de 640 x 480 píxeles (SD horizontal), 480 x 640 píxeles (SD vertical), 1280 x 720 píxeles (HD horizontal), 720 x 1280 píxeles (HD vertical), 1920 x 1080 píxeles (FHD horizontal) o 1080 x 1920 píxeles (HD vertical), a 25 fotogramas por segundo.
- Velocidad binaria constante (CBR) de 2 Mbps, con un intervalo de fotogramas clave de 2 segundos
- Audio AAC de 1 canal a 128 Kbps y una frecuencia de muestreo de 48 Khz. Los streams publicados desde Safari aparecen como sólo audio en las emisiones de streaming en directo.
Véase el Página de precios de Vonage para obtener más información sobre los precios de las secuencias HLS y RTMP.
Iniciar y detener las retransmisiones en directo
Utiliza el API REST de Video para iniciar y detener la retransmisión en directo de una sesión, y para comprobar el estado de una retransmisión en directo.
Los flujos HLS y RTMP se detienen automáticamente 60 segundos después de que el último cliente se desconecte de la sesión. Además, hay una duración máxima por defecto de 4 horas (14.400 segundos) para cada flujo HLS y RTMP (la emisión del flujo en directo se detiene automáticamente cuando se alcanza esta duración). Puede cambiar la duración máxima de la emisión estableciendo la propiedad maxDuration al llamar a la función iniciar emisión Método REST. Puede establecer una duración máxima de 60 segundos a 10 horas (36.000 segundos).
Nota: Las retransmisiones en directo finalizan durante la rotación del servidor para la sesión. Puede reiniciar una emisión en respuesta a eventos de notificación de rotación del servidor. Consulte Rotación de servidores y migración de sesiones.
Puede limitar la tasa de bits máxima que se utilizará para la emisión configurando la opción
maxBitrate cuando se llama a la propiedad iniciar emisión
método REST. Puede establecer que la tasa de bits máxima sea un valor comprendido entre 100.000 y
6.000.000 bits por segundo.
Configuración del diseño de vídeo para las retransmisiones en directo
Al utilizar la función de transmisión en directo, puede personalizar la disposición de los vídeos en la transmisión HLS o RTMP.
Por defecto, la función de retransmisión en directo organiza los vídeos de la sesión en una disposición en mosaico en el vídeo HLS o RTMP compuesto. La disposición se basa en el número de vídeos de la sesión. Por ejemplo, a continuación se ilustra la disposición cuando hay 1, 2, 4 o 5 secuencias en una sesión:
Es lo que se conoce como la disposición "más adecuada". Como alternativa, puede elegir entre otras disposiciones predefinidas. Para las otras disposiciones, asigne un nombre de clase a cada flujo de vídeo para determinar cómo aparecerá en la disposición. (Véase Tipos de diseño predefinidos.)
También puede definir sus propios diseños personalizados utilizando CSS. Consulte Definición de diseños personalizados.
Por defecto, el vídeo emitido es de 640x480 píxeles (SD horizontal, relación de aspecto 4:3). Los vídeos individuales se disponen en rectángulos contenedores dentro del vídeo compuesto. Por defecto, el vídeo se dibuja con la propiedad CSS object-fit establecida en contain. Por ejemplo, la siguiente ilustración muestra un diseño que se ajusta a la perfección con dos vídeos SD apaisados (4:3) (1 y 4) y dos vídeos HD apaisados (16:9) (2 y 3):
Puede modificar este comportamiento utilizando diseños personalizados.
También puede configurar un flujo de emisión para que utilice una resolución de 480x640 (SD vertical, relación de aspecto 3:4), 1280x720 (HD horizontal, relación de aspecto 16:9), 720x1280 (HD vertical, relación de aspecto 9:16), 1920x1080 (FHD horizontal, relación de aspecto 16:9), 1080x1920 (FHD vertical, relación de aspecto 9:16) cuando llame al punto final de emisión de inicio de la función API REST de Vonage. Es posible que desee utilizar una relación de aspecto vertical para las emisiones que incluyen secuencias de vídeo desde dispositivos móviles (que a menudo utilizan la relación de aspecto vertical).
Especificar el tipo de diseño inicial
Cuando inicie la retransmisión en directo de una sesión, utilizando el botón API RESTpuede, opcionalmente, especificar el tipo de diseño inicial.
Fije el Content-Type a "application/json" y establecer el en el tipo de diseño como una propiedad de los datos JSON enviados en la solicitud POST.
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "pip"
}
}
Si utiliza un diseño personalizado (véase Definición de diseños personalizados), establezca el type propiedad a "custom" y pasar la hoja de estilos como una propiedad adicional - stylesheet:
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "custom",
"stylesheet": "stream.instructor {position: absolute; width: 100%; height:50%;}"
}
}
También puede especificar el tipo de presentación que se utilizará cuando haya un flujo de pantalla compartida en la sesión estableciendo la propiedad screenshareType de la propiedad layout (véase diseños de pantalla compartida):
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "bestFit",
"screenshareType": "pip"
},
"name" : "archive_name",
"outputMode" : "composed"
}
La solicitud devuelve un código de respuesta de error 400 si especifica un tipo no válido.
Si no especifica un tipo de diseño inicial, el flujo HLS o RTMP utilizará el tipo de diseño que mejor se adapte. Si especifica cualquier otro tipo de diseño, asegúrese de aplicar las clases de diseño adecuadas para los flujos de la sesión (véase Asignación de clases de diseño a flujos).
Véase Tipos de diseño predefinidos.
Cambio dinámico del tipo de diseño
Cambiar dinámicamente el tipo de presentación durante una retransmisión en directo
Puede cambiar dinámicamente el tipo de presentación llamando a la función /broadcast/layout Punto final REST.
Fije el Content-Type a "application/json" e incluir el tipo de diseño como una propiedad de los datos JSON en la solicitud PUT:
{
"type": "pip"
}
Si utiliza un diseño personalizado (véase Definición de diseños personalizados) fija el type propiedad a "custom" y pasar la hoja de estilos como una propiedad adicional - stylesheet:
{
"type": "custom",
"stylesheet": "stream.instructor {position: absolute; width: 100%; height:50%;}"
}
También puede especificar el tipo de presentación que se utilizará cuando haya un flujo de pantalla compartida en la sesión estableciendo la propiedad screenshareType (véase diseños de pantalla compartida):
{
"type": "bestFit",
"screenshareType": "pip"
}
La solicitud devuelve un código de respuesta de error 400 si especifica un tipo no válido.
Cuando especifique un tipo de presentación distinto del tipo de presentación Best Fit predeterminado, asegúrese de aplicar las clases de presentación adecuadas para los flujos de la sesión (consulte Asignación de clases de diseño a flujos).
Selección de los flujos que se incluirán en una retransmisión en directo
Al iniciar una retransmisión en directo, si configuras la opción streamMode a "manual"puede elegir los flujos que desea incluir en la emisión. Puede añadir y eliminar flujos durante la emisión. Y puede especificar si la emisión incluirá el audio o el vídeo de un flujo (o ambos). Consulte la sección API REST de Video.
Activación de la función DVR en las emisiones HLS
Las emisiones HLS admiten la función DVR, que permite a los usuarios rebobinar, pausar y reanudar las emisiones (en reproductores compatibles con DVR). Puedes configurar el dvr opción de true al iniciar una retransmisión en directo.
Con el DVR activado, la URL HLS incluirá un ?DVR al final.
La función DVR ofrece una ventana de dos horas para reproducir el contenido de la emisión. Mientras la emisión está en curso, puedes reproducir (y rebobinar) cualquier punto de la emisión hasta dos horas antes de la hora actual. La grabación DVR deja de estar disponible dos horas después de detener la emisión.
Uso de metadatos de marca de tiempo HLS para sincronizar eventos
El manifiesto de la transmisión en directo HTTP incluye un EXT-X-PROGRAM-DATE-TIME que se establece en la marca de tiempo del inicio en tiempo real de la captura del segmento de flujo. Esto se define en el Especificación HTTP de retransmisión en directo. Se establece en un ISO 8601:2004 valor de fecha/hora, en UTC.
Por ejemplo, la cabecera tendrá el siguiente aspecto:
#EXT-X-PROGRAM-DATE-TIME:2021-09-02T11:45:00.810+00:00
Estas marcas de tiempo te permiten sincronizar eventos en aplicaciones cliente para tener en cuenta el retraso en el flujo HLS. Por ejemplo, si quieres enviar a un cliente un evento para que muestre un emoji en un momento específico del flujo de vídeo, el cliente puede utilizar la marca de tiempo para retrasar la visualización del emoji en función del retraso del flujo recibido.
Emisiones HLS de baja latencia
Para configurar una emisión HLS para que admita el modo de baja latencia, configure el parámetro low-latency opción de true cuando iniciar una retransmisión en directo.
Algunos reproductores HLS no admiten el modo de baja latencia.
Esta función es incompatible con Emisiones DVR HLS.
Emisiones simultáneas
Para iniciar varias retransmisiones en directo para la misma sesión simultáneamente, configure la opción multiBroadcastTag al iniciar cada retransmisión en directo. Debe establecer una cadena única para cada emisión simultánea de una sesión en curso.
Aunque puede especificar múltiples flujos RTMP cuando iniciar una retransmisión en directo, cada una de ellas utilizará las mismas opciones (como los flujos y el diseño asignados). Sin embargo, cuando inicie emisiones simultáneas (llamando al método REST varias veces, con la opción multiBroadcastTag ), puede utilizar diferentes diseños y asignar diferentes flujos a cada emisión simultánea.
Emisiones sólo audio y sólo vídeo
Cuando inicie una emisión en directo con la función API REST de OpenTok,
puede especificar si incluirá audio, vídeo o ambos. (Consulte la sección hasAudio y hasVideo opciones). Por defecto se emiten ambas.
Nota: Las emisiones de sólo audio incluirán vídeo con fotogramas negros de 160x120 en flujos RTMP. Algunos endpoints, como YouTube y Facebook, rechazan los flujos RTMP de solo audio.
Información sobre retransmisiones en directo
Utiliza el SDK de servidor o API REST para obtener información sobre una retransmisión en directo o enumerar las retransmisiones en directo.
Supervisión de los cambios de estado de las retransmisiones en directo
Puede registrar una URL de devolución de llamada (webhook) para recibir notificaciones de los cambios de estado de las retransmisiones en directo de un proyecto.
de un proyecto. El estado de una retransmisión en directo se establece en ether "started" o "stopped".
Para registrar una llamada de retorno de emisión para un proyecto:
Conéctese a su Cuenta de Video API de Vonage.
En el menú de la izquierda, seleccione la Account deseada (si tiene varias cuentas).
En el menú de la izquierda, seleccione la pestaña Applications y, a continuación, el proyecto para el que desea registrar una devolución de llamada segura.
Desplácese hasta Configuración del proyecto. Haga clic en el botón Editar encienda el Devolución de llamada asegurada botón deslizante, y haga clic en el botón Guardar botón.
Actualmente, debe activar las retrollamadas seguras para establecer una retrollamada de supervisión de difusión. Si desactiva las retrollamadas seguras, se desactivará cualquier retrollamada de emisión que establezca.
Localice el Control de emisiones y haga clic en el botón Configure botón.
Especifique la URL de devolución de llamada y (opcionalmente) un secreto de firma.
Para obtener más información sobre las retrollamadas seguras, consulte esta página.
Cuando cambia el estado de una emisión, el servidor envía peticiones HTTP POST a la URL que usted proporciona. El tipo de contenido de la solicitud es application/json. Los datos de la solicitud son un objeto JSON de la siguiente forma:
{
"id": "1748b707-0a81-464c-9759-c46ad10d3734",
"sessionId": "2_MX4xMDBfjE0Mzc2NzY1NDgwMTJ-TjMzfn4",
"applicationId": 100,
"createdAt": 1437676551000,
"updatedAt": 1437676551000,
"event": "broadcast",
"group": "status",
"resolution": "640x480",
"streamMode" : "auto",
"streams" : [],
"broadcastUrls": {
"hls" : "http://server/fakepath/playlist.m3u8",
"hlsStatus": "live",
"rtmp": {
"foo": {
"serverUrl": "rtmps://myfooserver:443/myfooapp",
"streamName": "myfoostream",
"status": "live"
},
"bar": {
"serverUrl": "rtmp://mybarserver:443/mybarapp",
"streamName": "mybarstream",
"status": "live"
}
}
},
"settings": {
"hls": {
"dvr": false,
"lowLatency": false
}
},
"status": "started"
}
El objeto JSON incluye las siguientes propiedades:
id- ID único de la emisión.sessionId- El ID de sesión de la Video API.applicationId- Su ID de proyecto de la Video API.group- Se establece en"broadcast".event- Se establece en"status".createdAt- La hora de inicio de la emisión, expresada en milisegundos desde la época Unix (1 de enero de 1970, 00:00:00 UTC).updatedAt- Para este método GET, esta marca de tiempo coincide con la marca de tiempo createdAt.resolution- La resolución de la emisión ("640x480", "1280x720", "1920x1080", "480x640", "720x1280" o "1080x1920").status- El estado de la emisión: o bien"started","stopped"o"failed". Para un"failed"compruebe el estadoreasondel evento para más detalles.reason- Para una emisión con elstatusajustado a"failed"esta propiedad contendrá"Internal server failure".broadcastUrls- Detalles sobre los flujos de difusión HLS y RTMP.En el caso de un flujo HLS, la URL se proporciona como la dirección
hlspropiedad. Véase el Guía para desarrolladores de transmisión en vivo de Vonage para más información sobre cómo utilizar esta URL. EnhlsStatuses una de las siguientes:"connecting"- El servidor de Vonage está en proceso de iniciar los transcodificadores. Este es el estado inicial."ready"- El servidor de Vonage se ha inicializado correctamente pero la CDN no consume medios."live"- El servidor de Vonage se ha inicializado correctamente y la CDN está consumiendo medios."ended"- El flujo fuente ha finalizado. Si el DVR está activado y se solicitan medios pregrabados, el estado cambiará a"live"."error"- Hay un error en la plataforma de Vonage.
Para cada flujo RTMP, se proporciona la URL del servidor RTMP y el nombre del flujo, junto con el estado del flujo RTMP.
status- El estado del flujo RTMP. Esta propiedad se establece en uno de los siguientes:connecting- La plataforma de Vonage está en proceso de conexión con el servidor RTMP remoto. Este es el estado inicial, y es el estado si se inicia cuando no hay streams publicados en la sesión. Cambia a "en vivo" cuando hay transmisiones (o cambia a uno de los otros estados).live- La plataforma de Vonage se ha conectado correctamente al servidor RTMP remoto y el contenido multimedia se está transmitiendo.offline- La plataforma de Vonage no pudo conectarse al servidor RTMP remoto. Esto se debe a un servidor inalcanzable o a un error en el handshake RTMP. Las causas incluyen conexiones RTMP rechazadas, aplicaciones RTMP inexistentes, nombres de flujo rechazados, errores de autenticación, etc. Compruebe que el servidor está en línea y que ha proporcionado la URL del servidor y el nombre del flujo correctos.error- Hay un error en la plataforma de Vonage.
serverUrl- La URL del servidor RTMP.streamName- El nombre del flujo RTMP.
settings- Más detalles sobre el flujo de difusión HLS. Estepropertiesincluye un objetohlscon las siguientes propiedades:dvr- Si Funcionalidad DVR está activado para esta emisión.lowLatency- Si modo de baja latencia está activado para el flujo HLS.
multiBroadcastTag- La etiqueta única para emisiones simultáneas (si se ha establecido una).streamMode- Si todos los flujos se incluyen en la emisión ("auto") o seleccione los flujos que desea incluir en la emisión ("manual"). Véase Selección de los flujos que se incluirán en una retransmisión en directo.streams- Una matriz de objetos correspondientes a los flujos que se están emitiendo actualmente. Esto sólo se establece para una emisión con el parámetrostatusajustado a"started"y elstreamModeajustado a"manual". Cada objeto de la matriz incluye las siguientes propiedades:streamId- El ID del flujo incluido en la emisión.hasAudio- Si el audio del flujo se incluye en la emisión.hasVideo- Si el vídeo del flujo se incluye en la emisión.
Problemas conocidos con la función de transmisión en vivo de Vonage
La función de retransmisión en directo tiene los siguientes problemas conocidos:
- Cuando detienes una transmisión en vivo, los últimos 5 segundos (antes de detener la transmisión) del contenido de la sesión de Vonage se omiten de la transmisión.