Sincronizar los flujos de trabajo de contenido multimedia con contenido de transmisión en vivo mediante código de tiempo

En esta página, se describe cómo sincronizar flujos de trabajo multimedia con contenido de transmisión en vivo en la API de Live Stream con un código de tiempo. La función de código de tiempo te permite para pasar entradas de código de tiempo, proporcionadas como datos en banda, a manifiestos de reproducción. Tú puede sincronizar sus flujos de trabajo internos con el contenido de la transmisión en vivo. Por ejemplo, puedes hacer coincidir las anotaciones de metadatos generadas de forma independiente con el transmitir en vivo o alinear el contenido de la transmisión interna con el Resultado de la API de Live Stream.

Los datos de código de tiempo deben cumplir con la especificación SMPTE 12M (consultar ST 12-2:2008). Para H264, los datos de código de tiempo se incluyen en la mejora complementaria de la sincronización de imágenes. de información (SEI) de Google. En el caso de H265, los datos de código de tiempo se incluyen en el archivo mensaje SEI.

Usar código de tiempo incorporado

Para usar código de tiempo incorporado en una transmisión de entrada, agrega lo siguiente: timecodeConfig al recurso Channel:

"timecodeConfig": {
  "source": "EMBEDDED_TIMECODE"
}

El valor predeterminado del campo source es MEDIA_TIMESTAMP.

De forma predeterminada, se usa la zona horaria UTC para interpretar el código de tiempo. Para usar un Para otra zona horaria, configura los campos timeZone o utcOffset:

"timecodeConfig": {
  "source": "EMBEDDED_TIMECODE",

  "timeZone": {"id": "America/Los_Angeles"}
  // or
  "utcOffset": "-28800s" // -8 hours from UTC
}

Se tiene en cuenta el horario de verano al configurar el campo timeZone. Consulta Cómo se interpreta el código de tiempo de entrada para obtener más información más detalles.

Cómo incluir el código de tiempo en los manifiestos de salida

Puedes configurar el campo useTimecodeAsTimeline como true para incluir el código de tiempo para cada manifiesto de salida:

"manifests": [
  {
    "key": "manifest_hls",
    "file_name": "manifest.m3u8",
    "type": "HLS",
    "muxStreams": ["mux_720p", "mux_540p"],
    "useTimecodeAsTimeline": true
  },
  {
    "key": "manifest_dash",
    "file_name": "manifest.mpd",
    "type": "DASH",
    "muxStreams": ["mux_720p", "mux_540p"],
    "useTimecodeAsTimeline": true
  }
]

Archivo de manifiesto de HLS

En el caso de las transmisiones en vivo HLS, el código de tiempo se emite como una etiqueta #EXT-X-PROGRAM-DATE-TIME para cada segmento en el archivo de manifiesto multimedia M3U8 y será similar a lo siguiente:

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:25.529Z
#EXTINF:1.265922
720p60_h264_ts-0000000000.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:26.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:28.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000002.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:30.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000003.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:32.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000004.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:34.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000005.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:36.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000006.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:38.795Z

#EXT-X-PROGRAM-DATE-TIME contiene datos de códigos de tiempo generados según la norma ISO8601. formato YYYY-MM-DDThh:mm:ss[.mmm]TZD, donde:

  • YYYY es el año de cuatro dígitos.
  • MM es el mes de dos dígitos (por ejemplo, 03 es marzo)
  • DD es el día del mes de dos dígitos (del 1 al 31).
  • T es un carácter establecido que indica el inicio del elemento de tiempo
  • hh representa los dos dígitos de una hora (de 00 a 23; a.m./p.m. no se incluye)
  • mm son los dos dígitos de un minuto (00 a 59).
  • ss son los dos dígitos de un segundo (00 a 59).
  • mmm son los tres dígitos de un milisegundo (000 a 999).
  • TZD es el designador de la zona horaria (Z, ±hh:mm). La Z representa UTC y la Los valores + o - indican la distancia con respecto a UTC.

Archivo de manifiesto de DASH

Para las transmisiones en vivo DASH, el atributo availabilityStartTime en la MPD de manifiesto se establece en el código de tiempo inicial y es similar al siguiente:

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011"
 type="dynamic" minBufferTime="PT4S" mediaPresentationDuration="PT0H0M473.262S"
 availabilityStartTime="2023-05-19T17:44:16.881Z">

availabilityStartTime contiene datos de códigos de tiempo generados según la norma ISO8601. formato YYYY-MM-DDThh:mm:ss[.mmm]TZD, donde:

  • YYYY es el año de cuatro dígitos.
  • MM es el mes de dos dígitos (por ejemplo, 03 es marzo)
  • DD es el día del mes de dos dígitos (del 1 al 31).
  • T es un carácter establecido que indica el inicio del elemento de tiempo
  • hh representa los dos dígitos de una hora (de 00 a 23; a.m./p.m. no se incluye)
  • mm son los dos dígitos de un minuto (00 a 59).
  • ss son los dos dígitos de un segundo (00 a 59).
  • mmm son los tres dígitos de un milisegundo (000 a 999).
  • TZD es el designador de la zona horaria (Z, ±hh:mm). La Z representa UTC y la Los valores + o - indican la distancia con respecto a UTC.

Cómo se analizan los datos de código de tiempo

El código de tiempo incorporado se analiza desde el primer fotograma del video. El Las marcas de tiempo multimedia de salida son avanzadas fotograma por fotograma posteriormente. No hay y la resincronización entre los tiempos de entrada y salida hasta que se complete la transmisión se desconectó y vuelve a conectar.

Dado que la marca de tiempo del video se reemplaza por la marca de tiempo generada desde el código de tiempo, eventos del canal debe seguir el reloj de código de tiempo para ejecutarse correctamente a una hora especificada.

Los tiempos pueden alinearse en transmisiones redundantes si el generador de códigos de tiempo en la La canalización de producción es la misma o está bloqueada tanto en la instancia principal como en la de respaldo codificadores de contribuciones (consulta el video ¿Qué es el bloqueo de salida?).

Cómo se interpreta el código de tiempo de entrada

El código de tiempo en un mensaje de SEI de sincronización de imágenes contiene solo la hora (16:30:00;10). Para incluir el código de tiempo en los manifiestos de salida, se requieren la fecha y la hora, como como fecha y hora completa (2021-12-06T16:30:00.333Z) o época (1638837000333).

Cuando interpretas el código de tiempo de SEI como formato de fecha y hora, la API de Live Stream siempre supone que la transmisión de entrada entrante es en vivo o está cerca de estar en vivo. La API de Live Stream usa la zona horaria que se especifica en el archivo timecodeConfig para interpretar que el código de tiempo de SEI sea lo siguiente: cerca, pero no más tarde que la hora actual posible.

Por ejemplo, supongamos que la API de Live Stream recibe una transmisión de entrada en el la hora actual de 2021-12-06T21:00:00Z en UTC. En la siguiente tabla, se muestra cómo El código de tiempo de SEI se convierte al formato de fecha y hora:

ID de zona horaria Código de tiempo de SEI Se interpretó como en la hora local Interpretado como UTC
UTC 16:30:00;10 2021-12-06T16:30:00.333+00:00 2021-12-06T16:30:00.333Z
America/Los_Angeles 16:30:00;10 2021-12-05T16:30:00.333-08:00 2021-12-06T00:30:00.333Z
America/New_York 16:30:00;10 2021-12-05T16:30:00.333-05:00 2021-12-05T21:30:00.333Z
Asia/Bangkok 16:30:00;10 2021-12-06T16:30:00.333+07:00 2021-12-06T09:30:00.333Z
America/Los_Angeles 03:30:00;10 2021-12-06T03:30:00.333-08:00 2021-12-06T11:30:00.333Z
Asia/Bangkok 03:30:00;10 2021-12-07T03:30:00.333+07:00 2021-12-06T20:30:00.333Z

Ten en cuenta que las horas interpretadas nunca son posteriores a la hora UTC actual del 2021-12-06T21:00:00Z