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.

En el caso de una transmisión RTMP, la plataforma de Vonage 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 Vonage Media Router). Para obtener más información, consulta El router de medios y los modos de medios de Vonage.

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.

Los flujos RTMP de Vonage 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
  • 2 Mbps de velocidad de bits constante (CBR), 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. Las transmisiones publicadas desde Safari aparecen como «solo audio» en las retransmisiones 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 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

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.

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

Vonage video API default layout 1 Vonage video API default layout 2 Vonage video API default layout 4 Vonage video API default layout 5

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):

Vonage Video API layout aspect ratios

Puedes 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 inicias la retransmisión en directo de una sesión, utilizando el 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 puedes especificar un tipo de diseño que se utilice cuando haya una transmisión compartida de pantalla en la sesión, configurando 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 se 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.

Tipo de diseño que cambia dinámicamente

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) 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 compartida de pantalla en la sesión configurando 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 se especifica un tipo no válido.

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

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"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 de grabación en las retransmisiones 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.

Si la función DVR está activada, la URL HLS incluirá un ?DVR cadena de consulta 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 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 de transmisión en directo por HTTP. Se establece 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 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 se pueden especificar varias transmisiones 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 solo de audio y solo de 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.

Cómo obtener información sobre las 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 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 la pestaña «Applications» y, a continuación, el proyecto para el que deseas registrar una devolución de llamada segura.

  4. Desplázate hacia abajo hasta Configuración del proyecto. Haga clic en el botón Editar encienda el Devolución de llamada asegurada botón deslizante, y haz clic en el Guardar botón.

Actualmente, es necesario habilitar las respuestas seguras para configurar una respuesta de supervisión de difusión. Si deshabilitas las respuestas seguras, cualquier respuesta de difusión que configures quedará deshabilitada.

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

  2. 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",
  "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 identificador 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 (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 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 hls propiedad. 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. En hlsStatus es una de las siguientes:

    • "connecting" — El servidor de Vonage está iniciando 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 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 Vonage está conectándose al 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 de Vonage se ha conectado correctamente al servidor RTMP remoto y el contenido multimedia se está transmitiendo.
      • offline — La plataforma de Vonage no ha podido conectarse al servidor RTMP remoto. Esto se debe a que el servidor no está accesible 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 - Hay un error en la plataforma de Vonage.
    • 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 Vonage

La función de retransmisión en directo tiene los siguientes problemas conocidos:

  • Al detener una retransmisión en directo, los últimos 5 segundos (antes de detener la retransmisión) del contenido de la sesión de Vonage se omiten de la retransmisión.