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 cifreMM
è 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 temporalehh
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 cifreMM
è 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 temporalehh
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
.