Medien-Workflows über den Timecode mit Livestreamcontent synchronisieren

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 angibt
  • hh 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 angibt
  • hh 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