Sincronizzare i flussi di lavoro multimediali con i contenuti dei live streaming utilizzando il timecode

In questa pagina viene descritto come sincronizzare i flussi di lavoro multimediali con i contenuti in live streaming. nell'API Live Stream utilizzando i timecode. La funzionalità di timecode consente di trasmettere gli input di timecode, forniti come dati in banda, ai manifest di riproduzione. Tu possa sincronizzare i flussi di lavoro multimediali interni con i contenuti del live streaming. Ad esempio, puoi abbinare le annotazioni dei metadati generate in modo indipendente con il trasmettere contenuti in live streaming o allineare i contenuti trasmessi interni ai Output dell'API Live Stream.

I dati dei timecode devono essere conformi alla specifica SMPTE 12M (vedi ST 12-2:2008). Per H264, i dati dei timecode vengono riportati nel miglioramento aggiuntivo dei tempi di visualizzazione delle immagini informazioni (SEI). Per H265, i dati del timecode vengono trasmessi nel messaggio SEI del timecode.

Usa timecode incorporato

Per utilizzare il timecode incorporato in uno stream di input, aggiungi il seguente timecodeConfig alla risorsa Channel:

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

Il valore predefinito per il campo source è MEDIA_TIMESTAMP.

Per impostazione predefinita, per interpretare il timecode viene utilizzato il fuso orario UTC. Per utilizzare un fuso orario diverso, imposta il campo timeZone o utcOffset:

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

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

Quando si imposta il campo timeZone, viene presa in considerazione l'ora legale. Consulta Come viene interpretato il timecode di input per ulteriori informazioni i dettagli.

Includi il timecode nei manifest di output

Puoi impostare il campo useTimecodeAsTimeline su true per includere il timecode per ogni manifest di output:

"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
  }
]

File manifest HLS

Per i live streaming HLS, il timecode viene emesso come tag #EXT-X-PROGRAM-DATE-TIME per ogni segmento nel file manifest M3U8 dei contenuti multimediali e ha un aspetto simile al seguente:

#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 i dati del codice di tempo generati in base al formato ISO8601YYYY-MM-DDThh:mm:ss[.mmm]TZD, dove:

  • YYYY è l'anno a quattro cifre
  • MM è il mese a due cifre (ad es. 03 è marzo)
  • DD indica il giorno del mese di due cifre (da 01 a 31)
  • T è un carattere impostato che indica l'inizio dell'elemento temporale
  • hh sono le due cifre di un'ora (da 00 a 23, AM/PM non inclusi)
  • mm indica le due cifre del minuto (da 00 a 59)
  • ss indica le due cifre del secondo (da 00 a 59)
  • mmm sono le tre cifre di un millisecondo (da 000 a 999)
  • TZD è l'indicatore del fuso orario (Z, ±hh:mm). La Z rappresenta il fuso orario UTC, I valori + o - indicano quanto lontano o indietro rispetto al fuso orario UTC.

File manifest DASH

Per i live streaming DASH, l'attributo availabilityStartTime nel file MPD è impostato sul timecode iniziale e ha un aspetto simile al seguente:

<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 i dati del codice di tempo generati in base al formato ISO8601YYYY-MM-DDThh:mm:ss[.mmm]TZD, dove:

  • YYYY indica l'anno di quattro cifre
  • MM è il mese a due cifre (ad es. 03 è marzo)
  • DD indica il giorno del mese di due cifre (da 01 a 31)
  • T è un carattere impostato che indica l'inizio dell'elemento temporale
  • hh sono le due cifre di un'ora (da 00 a 23, AM/PM non inclusi)
  • mm indica le due cifre del minuto (da 00 a 59)
  • ss indica le due cifre del secondo (da 00 a 59)
  • mmm sono le tre cifre di un millisecondo (da 000 a 999)
  • TZD è l'indicatore del fuso orario (Z, ±hh:mm). La Z rappresenta il fuso orario UTC, I valori + o - indicano quanto lontano o indietro rispetto al fuso orario UTC.

Come vengono analizzati i dati dei timecode

Il codice di tempo incorporato viene analizzato a partire dal primo frame video. La i timestamp dei contenuti multimediali di output sono avanzati frame per frame successivi. Non sono presenti risincronizzazione tra i tempi di input e output fino a quando il flusso di input disconnesso e riconnesso.

Poiché il timestamp del video viene sostituito da quello generato dal timecode, gli eventi del canale devono seguire l'orologio del timecode per essere eseguiti correttamente in un momento specifico.

La sincronizzazione può essere allineata su stream ridondanti se il generatore di timecode nella pipeline di produzione è lo stesso o è bloccato sia sui codificatori di contributi principali che su quelli di backup (vedi il video Che cos'è il blocco dell'output?).

Come viene interpretato il timecode di input

Il timecode in un messaggio SEI relativo alla temporizzazione delle immagini contiene solo l'ora (16:30:00;10). Per includere il timecode nei manifest di output, sono necessarie sia la data sia l'ora, ad esempio la data e l'ora complete (2021-12-06T16:30:00.333Z) o l'ora dell'epoca (1638837000333).

Quando si interpreta il timecode SEI come formato data/ora, l'API Live Stream presuppone sempre che lo stream di input in entrata sia in diretta o quasi. L'API Live Stream utilizza il fuso orario specificato nell'API Live Stream timecodeConfig per interpretare il timecode SEI in modo che chiuso, ma non oltre l'ora corrente.

Ad esempio, supponiamo che l'API Live Stream riceva uno stream di input all'ora corrente di 2021-12-06T21:00:00Z UTC. La tabella seguente mostra come avviene la conversione del codice di tempo SEI in formato data/ora:

ID fuso orario Timecode SEI Interpretata come nell'ora locale Interpretato come in 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

Tieni presente che gli orari interpretati non sono mai successivi all'ora UTC attuale di 2021-12-06T21:00:00Z.