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.

Esta página incluye las siguientes secciones:

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 de OpenTok. Por ejemplo, puedes proporcionar una transmisión HLS a un cliente si la sesión de OpenTok ha alcanzado el límite de 15 000 conexiones para las emisiones interactivas en directo de OpenTok. Las transmisiones HLS admiten un número ilimitado de espectadores. Las transmisiones RTMP están limitadas por el número de espectadores que admite el proveedor de RTMP.

Puedes utilizar la función de transmisión RTMP para enviar una señal 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 retransmisió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 flujos de vídeo simultáneamente, los flujos adicionales no se incluirán en la retransmisión.

Un HLS tiene un retraso de entre 15 y 20 segundos respecto a las transmisiones en directo de la sesión de OpenTok; El HLS de baja latencia (LL-HLS) tiene un retraso de entre 4 y 6 segundos respecto a las transmisiones en directo. Durante el retraso inicial, la transmisión no está disponible. No facilites la URL de la transmisión a los clientes hasta que la transmisión HLS o RTMP esté disponible.

Un EXT-X-ENDLIST La etiqueta se incluye en las listas de reproducción multimedia al final de una transmisión HLS (para que las aplicaciones de reproducción puedan detectar el final de la transmisión).

En el caso de una transmisión RTMP, la plataforma OpenTok introduce una latencia de aproximadamente 5 segundos. Sin embargo, cada plataforma de distribución RTMP (como YouTube Live o Facebook) añadirá una latencia adicional en función del procesamiento que realice del vídeo antes de publicarlo.

La función de transmisión HLS y RTMP 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.

La reproducción HLS está soportada de forma nativa por la mayoría de los navegadores modernos. Para los entornos que carecen de soporte nativo, plugins como Flowplayer para garantizar la compatibilidad entre navegadores.

Las transmisiones RTMP de OpenTok tienen las siguientes especificaciones:

  • Códec de vídeo H.264 «baseline», nivel 3.1
  • 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 (FHD vertical), a 25 fotogramas por segundo
  • Velocidad de bits del vídeo
    • Velocidad de bits constante (CBR) de 2 Mbps hasta una resolución HD (720p), con un intervalo entre fotogramas clave de 2 segundos
    • Velocidad de bits constante (CBR) de 4 Mbps para una resolución FHD (1080p), con un intervalo entre fotogramas clave de 2 segundos
  • Audio AAC de 1 canal a 128 Kbps y una frecuencia de muestreo de 48 kHz

Puedes limitar la tasa de bits máxima que se utilizará para la retransmisión configurando el maxBitrate propiedad al llamar al método REST «start broadcast».

Las transmisiones HLS de OpenTok tienen las siguientes especificaciones:

  • Códec de vídeo H.264 «baseline», nivel 3.1

  • 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

  • Niveles de calidad:

    Resolución Niveles de calidad Velocidad de transmisión de audio Velocidad de bits máxima de la capa HLS
    VGA 3 128 kbps 1 Mbps
    HD (720p) 4 128 kbps 2 Mbps
    FHD (1080p) 5 128 kbps 4 Mbps
  • Audio AAC de 1 canal a 128 Kbps y una frecuencia de muestreo de 48 kHz

Véase el Página de precios de OpenTok Para obtener más información sobre las tarifas de la transmisión en streaming mediante HLS y RTMP.

Iniciar y detener las retransmisiones en directo

Utiliza la API REST de OpenTok para iniciar y stop la retransmisión en directo de una sesión, y para comprueba el estado de una retransmisión en directo.

Las transmisiones 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 predeterminada de 4 horas (14 400 segundos) para cada transmisión HLS y RTMP (la retransmisión en directo se detiene automáticamente cuando se alcanza esta duración). Puede modificar la duración máxima de la retransmisión configurando el maxDuration propiedad al llamar a la iniciar emisión Método REST. Puedes establecer la duración máxima entre 60 segundos y 10 horas (36 000 segundos).

Nota: Las retransmisiones en directo finalizan durante la rotación de servidores de la sesión. Puedes reiniciar una retransmisión al recibir notificaciones de rotación de servidores. Consulta 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. Puedes establecer la velocidad de transmisión máxima en un valor comprendido entre 100 000 y 6 000 000 de bits por segundo.

Configuración del diseño de vídeo para las retransmisiones en directo de OpenTok

Al utilizar la función de retransmisión en directo de OpenTok, puedes personalizar la disposición de los vídeos en la transmisión HLS o RTMP.

De forma predeterminada, la función de retransmisión en directo de OpenTok organiza los vídeos de la sesión de OpenTok en un diseño en mosaico dentro del vídeo compuesto HLS o RTMP. La disposición depende del número de vídeos que haya en la sesión. Por ejemplo, a continuación se muestra la disposición cuando hay 1, 2, 4 o 5 transmisiones en una sesión:

Esto se conoce como la disposición «óptima». Como alternativa, puedes elegir entre otras disposiciones predefinidas. En el caso de las demás disposiciones, debes asignar un nombre de clase a cada flujo de vídeo de OpenTok 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 de emisión tiene una resolución de 640 x 480 píxeles (SD en horizontal, relación de aspecto 4:3). Los vídeos individuales de OpenTok se organizan en rectángulos contenedores dentro del vídeo compuesto. Por defecto, el vídeo se representa con el CSS object-fit con el valor contain. Por ejemplo, la siguiente ilustración muestra una disposición óptima con dos vídeos SD en formato horizontal (4:3) (1 y 4) y dos vídeos HD en formato horizontal (16:9) (2 y 3):

Puedes modificar este comportamiento utilizando diseños personalizados.

También puedes configurar una transmisión para que utilice una resolución de 480x640 (SD vertical, relación de aspecto 3:4), 1280x720 (HD apaisado, relación de aspecto 16:9), 720x1280 (HD vertical, relación de aspecto 9:16), 1920x1080 (FHD apaisado, relación de aspecto 16:9) o 1080x1920 (FHD vertical, relación de aspecto 9:16) al llamar a la iniciar emisión método de la API REST de OpenTok. Es posible que te interese utilizar una relación de aspecto vertical para las retransmisiones que incluyan flujos de vídeo procedentes de dispositivos móviles (que suelen utilizar la relación de aspecto vertical).

Especificar el tipo de diseño inicial

Cuando iniciar la retransmisión en directo de una sesión, mediante la API REST de OpenTok, puedes, si lo deseas, especificar el tipo de disposición inicial.

Fije el Content-Type a "application/json" y establecer el tipo de estructura 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), configura 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 puedes especificar un tipo de diseño que se utilice cuando haya una transmisión compartida de pantalla en la sesión configurando el screenshareType propiedad del layout propiedad (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 se especifica un tipo no válido.

También puedes especificar el tipo de diseño inicial al iniciar una transmisión utilizando los SDK de servidor de OpenTok:

Si no se especifica un tipo de diseño inicial, la transmisión HLS o RTMP utilizará el tipo de diseño más adecuado. Si se especifica cualquier otro tipo de diseño, asegúrate de aplicar las clases de diseño adecuadas a las transmisiones de la sesión de OpenTok (véase Asignación de clases de diseño a las transmisiones de OpenTok »).

Véase Tipos de diseño predefinidos.

Cambiar dinámicamente el tipo de presentación durante una retransmisión en directo

Puedes cambiar dinámicamente el tipo de diseño llamando a OpenTok API REST de /broadcast/layout.

Fije el Content-Type a "application/json" e incluye 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) establece 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 puedes especificar un tipo de diseño que se utilice cuando haya una transmisión de pantalla compartida en la sesión configurando el screenshareType propiedad (véase diseños de pantalla compartida):

{
  "type": "bestFit",
  "screenshareType": "pip"
}

La solicitud devuelve un código de respuesta de error 400 si se especifica un tipo no válido.

También puedes cambiar el tipo de diseño utilizando los SDK del servidor de OpenTok:

Al especificar un tipo de diseño distinto del predeterminado («Best Fit»), asegúrate de aplicar las clases de diseño adecuadas a las transmisiones de la sesión de OpenTok (véase Asignación de clases de diseño a las transmisiones de OpenTok).

Selección de los flujos que se incluirán en una retransmisión en directo

Cuando inicias una retransmisión en directo, si configuras el streamMode a "manual", puedes elegir las transmisiones que quieres incluir en la emisión. Puedes añadir y eliminar transmisiones durante la emisión. Además, puedes especificar si la emisión incluirá el audio o el vídeo de una transmisión (o ambos). Consulta Iniciar una retransmisión en directo y Selección de los flujos que se incluirán en una retransmisión en directo.

Activación de la función de grabación en las retransmisiones HLS

Las emisiones de HLS son compatibles con la función de grabación digital (DVR), lo que permite a los usuarios rebobinar, pausar y reanudar las emisiones (en reproductores compatibles con DVR). Puedes configurar el dvr opción de true cuando iniciar una retransmisión en directo.

Si la función DVR está activada, la URL HLS incluirá una cadena de consulta «?DVR» añadida al final.

La función de DVR permite reproducir contenidos emitidos durante un periodo de dos horas. Mientras se está emitiendo el programa, puedes reproducir (y rebobinar hasta) cualquier momento de la emisión hasta dos horas antes del momento actual. La grabación del DVR deja de estar disponible dos horas después de que finalice 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 encabezado, que se establece en la marca de tiempo del inicio en tiempo real de la captura del segmento de transmisión. Esto se define en el Especificación de transmisión en directo por HTTP. Esto está configurado en un ISO 8601:2004 valor de fecha y 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 las aplicaciones cliente para tener en cuenta el retraso en la transmisión HLS. Por ejemplo, si quieres enviar a un cliente un evento para que muestre un emoji en un momento concreto de la transmisión de vídeo , el cliente puede utilizar la marca de tiempo para retrasar la visualización del emoji en función del retraso de la transmisión recibida.

Emisiones HLS de baja latencia

Para configurar una retransmisión HLS de modo que admita el modo de baja latencia, configura el 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 de la misma sesión al mismo tiempo, configura el multiBroadcastTag opción cuando al iniciar cada retransmisión en directo. Debes establecer un valor único para cada retransmisión simultánea de una sesión en curso.

Aunque puedes especificar varias transmisiones RTMP al iniciar una retransmisión en directo, todas ellas utilizarán las mismas opciones (como las transmisiones asignadas y el diseño). Sin embargo, cuando inicies retransmisiones simultáneas (llamando al método REST varias veces, con el multiBroadcastTag (conjunto de opciones), puedes utilizar diferentes diseños y asignar diferentes flujos a cada emisión simultánea.

Emisiones solo de audio y solo de vídeo

Cuando inicias una retransmisión en directo utilizando el 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 retransmisiones solo de audio incluirán vídeo con fotogramas negros de 160 x 120 en las transmisiones RTMP. Algunos destinos, como YouTube y Facebook, rechazan las transmisiones RTMP solo de audio.

Cómo obtener información sobre las retransmisiones en directo

Utiliza la API REST de OpenTok para obtener información sobre una retransmisión en directo o para lista retransmisiones en directo. O bien, utiliza los SDK de servidor de OpenTok:

Supervisión de los cambios en el 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:

  1. Conéctese a su Account de la Video API de Vonage.

  2. En el menú de la izquierda, seleccione la Account deseada (si tiene varias cuentas).

  3. En el menú de la izquierda, selecciona el proyecto para el que deseas registrar una llamada de retorno segura.

  4. Localice el Supervisión de emisiones y haga clic en el botón Configure botón.

  5. Especifica 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",
  "projectId": 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 identificador de sesión de la Video API.

  • projectId - 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 (ya sea «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 estado reason del evento para más detalles.

  • reason — Para una emisión con el status ajustado a "failed", esta propiedad mostrará el mensaje «Error interno del servidor».

  • 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 hls propiedad. Véase el Guía para desarrolladores de retransmisiones en directo de OpenTok para más información sobre cómo utilizar esta URL. En hlsStatus es una de las siguientes:

  • "connecting" — El servidor de OpenTok está iniciando los transcodificadores. Este es el estado inicial.
  • "ready" — El servidor de OpenTok se ha inicializado correctamente, pero la CDN no está reproduciendo el contenido multimedia.
  • "live" — El servidor de OpenTok se ha inicializado correctamente y la CDN está reproduciendo el contenido multimedia.
  • "ended" - El flujo fuente ha finalizado. Si el DVR está activado y se solicitan medios pregrabados, el estado cambiará a "live".
  • "error" — Se ha producido un error en la plataforma OpenTok.

Para cada transmisión RTMP, se indican la URL del servidor RTMP y el nombre de la transmisión, junto con el estado de la transmisión RTMP.

  • status — El estado de la transmisión RTMP. Esta propiedad puede tomar uno de los siguientes valores:

    • connecting — La plataforma OpenTok está estableciendo conexión con el servidor RTMP remoto. Este es el estado inicial, y es el estado en el que se encuentra si se inicia la sesión cuando no hay transmisiones publicadas en ella. Pasa a «en directo» cuando hay transmisiones (o cambia a alguno de los otros estados).
    • live — La plataforma OpenTok se ha conectado correctamente al servidor RTMP remoto y el contenido multimedia se está transmitiendo.
    • offline — La plataforma OpenTok no ha podido conectarse al servidor RTMP remoto. Esto se debe a que el servidor no está disponible o a un error en el establecimiento de la conexión RTMP. Entre las causas se incluyen conexiones RTMP rechazadas, Applications RTMP inexistentes, nombres de transmisión rechazados, errores de autenticación, etc. Comprueba que el servidor esté en línea y que hayas introducido correctamente la URL del servidor y el nombre de la transmisión.
    • error — Se ha producido un error en la plataforma OpenTok.
  • serverUrl — La URL del servidor RTMP.

  • streamName — El nombre de la transmisión RTMP.

  • settings - Más detalles sobre el flujo de difusión HLS. Este properties incluye un objeto hls propiedad con las siguientes características:
  • 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ámetro status ajustado a "started" y el streamMode ajustado a "manual". Cada objeto de la matriz incluye las siguientes propiedades:
    • streamId — El identificador de la transmisión incluida en la emisión.
    • hasAudio — Si el audio de la transmisión 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 retransmisión en directo de OpenTok

La función de retransmisión en directo presenta el siguiente problema conocido:

  • Cuando detienes una retransmisión en directo, los últimos 5 segundos (antes de detener la retransmisión) de contenido de la sesión de OpenTok se omiten de la señal de retransmisión.