Auf dieser Seite wird beschrieben, wie du Medienworkflows mit Live-Streams in der Live Stream API mithilfe von Zeitcodes synchronisierst. Mit der Timecode-Funktion können Sie um Timecode-Eingaben, die als In-Band-Daten bereitgestellt werden, an Wiedergabemanifeste weiterzugeben. Du kannst dann deine internen Medienworkflows mit den Livestream-Inhalten synchronisieren. Sie können beispielsweise unabhängig generierte Metadatenanmerkungen mit dem Inhalte live streamen oder interne übertragene Inhalte auf die Live Stream API-Ausgabe
Die Timecode-Daten müssen der SMPTE 12M-Spezifikation entsprechen (siehe ST 12-2:2008). Für H264: Zeitcodedaten werden in die zusätzliche Optimierung des Bild-Timings übertragen. Information (SEI) angezeigt. Bei H265 werden Zeitcodedaten im Zeitcode übertragen. SEI-Nachricht.
Eingebetteten Zeitcode verwenden
Wenn du einen in einen Eingabestream eingebetteten Zeitcode verwenden möchtest, füge der Channel
-Ressource Folgendes hinzu:
timecodeConfig
"timecodeConfig": { "source": "EMBEDDED_TIMECODE" }
Der Standardwert für das Feld source
ist MEDIA_TIMESTAMP
.
Standardmäßig wird die Zeitzone UTC verwendet, um den Zeitcode zu interpretieren. Um eine
legen Sie das Feld timeZone
oder utcOffset
fest:
"timecodeConfig": { "source": "EMBEDDED_TIMECODE", "timeZone": {"id": "America/Los_Angeles"} // or "utcOffset": "-28800s" // -8 hours from UTC }
Beim Festlegen des Felds timeZone
wird die Sommerzeit berücksichtigt.
Weitere Informationen finden Sie unter So wird der eingegebene Timecode interpretiert.
Details.
Zeitcode in Ausgabemanifeste einfügen
Sie können das Feld useTimecodeAsTimeline
auf
true
, um Timecode für jedes Ausgabemanifest einzufügen:
"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 } ]
HLS-Manifestdatei
Bei HLS-Livestreams wird der Timecode als #EXT-X-PROGRAM-DATE-TIME
-Tag für
jedes Segment in der Media M3U8-Manifestdatei und sieht in etwa so aus:
#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
enthält Timecode-Daten, die gemäß dem ISO 8601-Format YYYY-MM-DDThh:mm:ss[.mmm]TZD
generiert wurden. Dabei gilt:
YYYY
ist das vierstellige Jahr.MM
ist der zweistellige Monat (z. B. 03 für März)DD
ist der zweistellige Tag des Monats (01 bis 31)T
ist ein festgelegtes Zeichen, das den Beginn des Zeitelements angibthh
sind die beiden Ziffern einer Stunde (00 bis 23, AM/PM nicht inbegriffen)mm
ist die zweistellige Minutenzahl (00 bis 59)ss
sind die beiden Ziffern einer Sekunde (00 bis 59).mmm
ist die dreistellige Zahl einer Millisekunde (000 bis 999)TZD
ist die Zeitzone (Z, ±hh:mm). Das „Z“ steht für UTC und die Werte „+“ oder „-“ geben an, wie viele Stunden vor oder nach UTC die Zeit ist.
DASH-Manifestdatei
Bei DASH-Livestreams: Attribut availabilityStartTime
in der MPD-Datei
wird die Manifestdatei auf den anfänglichen Timecode festgelegt und sieht in etwa so aus:
<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
enthält Timecode-Daten, die gemäß dem ISO 8601-Format YYYY-MM-DDThh:mm:ss[.mmm]TZD
generiert wurden. Dabei gilt:
YYYY
ist die vierstellige Jahreszahl.MM
ist der zweistellige Monat (z. B. 03 für März)DD
ist der zweistellige Tag des Monats (01 bis 31)T
ist ein festgelegtes Zeichen, das den Beginn des Zeitelements angibthh
sind die beiden Ziffern einer Stunde (00 bis 23, AM/PM nicht inbegriffen)mm
ist die zweistellige Minutenzahl (00 bis 59)ss
sind die beiden Ziffern einer Sekunde (00 bis 59).mmm
ist die dreistellige Zahl einer Millisekunde (000 bis 999)TZD
ist die Zeitzone (Z, ±hh:mm). Das Z steht für UTC und der Die Werte „+“ und „-“ geben an, wie weit sie vor bzw. hinter der UTC liegen.
Wie die Timecode-Daten geparst werden
Der eingebettete Timecode wird ab dem ersten Videoframe geparst. Die Zeitstempel der Ausgabemedien werden danach Frame für Frame vor- und zurückgedreht. Es gibt keine Neusynchronisierung zwischen Eingabe- und Ausgabezeitpunkt, bis der Eingabestream Verbindung getrennt und wiederhergestellt.
Da der Zeitstempel des Videos durch den Zeitstempel ersetzt wird, Timecode, Kanalereignisse muss der Timecode-Uhr folgen, um zu einer bestimmten Zeit richtig ausgeführt zu werden.
Das Timing kann auf redundante Streams abgestimmt werden, wenn der Timecode-Generator im Produktionspipeline ist identisch oder sowohl für die primäre als auch für die Sicherung Beitrags-Encoder (siehe Video What is Output Locking?)
Wie der eingegebene Timecode interpretiert wird
Der Zeitcode in einer SEI-Nachricht für die Bildzeit enthält nur die Uhrzeit (16:30:00;10
). Um den Zeitcode in Ausgabemanifeste aufzunehmen, sind sowohl Datum als auch Uhrzeit erforderlich, z. B. die vollständige Datums- und Uhrzeitangabe (2021-12-06T16:30:00.333Z
) oder die Unixzeit (1638837000333
).
Bei der Interpretation des SEI-Zeitcodes als Datum/Uhrzeit-Format
geht immer davon aus, dass der eingehende Eingabestream live oder nah am Livestream ist.
Die Live Stream API verwendet die Zeitzone, die im
timecodeConfig
, um den SEI-Timecode so zu interpretieren:
aber nicht nach der aktuellen Zeit.
Angenommen, die Live Stream API empfängt um 2021-12-06T21:00:00Z
Uhr (UTC) einen Eingabestream. In der folgenden Tabelle sehen Sie,
Der SEI-Zeitcode wird in das Datum/Uhrzeit-Format konvertiert:
Zeitzonen-ID | SEI-Timecode | Interpretiert in Ortszeit | Interpretiert als 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 |
Die interpretierten Zeiten liegen nie nach der aktuellen UTC-Zeit von
2021-12-06T21:00:00Z