使用時間碼將媒體工作流程與直播內容同步

本頁面說明如何使用時間碼,在 Live Stream API 中將媒體工作流程與直播內容同步。時間碼功能可讓您將時間碼輸入內容 (以頻帶內資料提供) 傳遞至播放資訊清單。接著,您就可以將內部媒體工作流程與直播內容同步。舉例來說,您可以將獨立產生的中繼資料註解與直播內容比對,或將內部廣播內容與 Live Stream API 輸出內容對齊。

時間碼資料必須符合 SMPTE 12M 規格 (請參閱 ST 12-2:2008)。對於 H264,時間碼資料會透過影像時間輔助增強資訊 (SEI) 訊息傳送。在 H265 中,時間碼資料會透過時間碼 SEI 訊息傳送。

使用內嵌時間碼

如要使用輸入串流中嵌入的時間碼,請將下列 timecodeConfig 新增至 Channel 資源:

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

source 欄位的預設值為 MEDIA_TIMESTAMP

根據預設,系統會使用世界標準時間時區來解讀時間碼。如要使用其他時區,請設定 timeZoneutcOffset 欄位:

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

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

設定 timeZone 欄位時,系統會將日光節約時間納入考量。詳情請參閱「如何解讀輸入的時間碼」。

在輸出資訊清單中加入時間碼

您可以將 useTimecodeAsTimeline 欄位設為 true,以便在每個輸出資訊清單中加入時間碼:

"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 資訊清單檔案

如果是 HLS 即時串流,時間碼會以 #EXT-X-PROGRAM-DATE-TIME 標記的形式,為媒體 M3U8 資訊清單檔案中的每個片段發出,並類似於以下內容:

#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 包含根據 ISO8601 格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD 產生的時間碼資料,其中:

  • YYYY 是四位數的年份
  • MM 是兩位數月份 (例如 03 代表 3 月)
  • DD 是兩位數的日期 (01 到 31)
  • T 是代表時間元素開始的字元集
  • hh 是小時的兩位數字 (00 到 23,不含 AM/PM)
  • mm 是分鐘的兩位數字 (00 到 59)
  • ss 是秒的兩位數字 (00 到 59)
  • mmm 是毫秒的三位數字 (000 到 999)
  • TZD 是時區指標 (Z、±hh:mm)。Z 代表世界標準時間,而 + 或 - 值則表示與世界標準時間相差多少。

DASH 資訊清單檔案

對於 DASH 即時串流,MPD 資訊清單檔案中的 availabilityStartTime 屬性會設為初始時間碼,並類似於以下內容:

<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 包含根據 ISO8601 格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD 產生的時間碼資料,其中:

  • YYYY 是四位數的年份
  • MM 是兩位數月份 (例如 03 代表 3 月)
  • DD 是兩位數的日期 (01 到 31)
  • T 是代表時間元素開始的字元集
  • hh 是小時的兩位數字 (00 到 23,不含 AM/PM)
  • mm 是分鐘的兩位數字 (00 到 59)
  • ss 是秒的兩位數字 (00 到 59)
  • mmm 是毫秒的三位數字 (000 到 999)
  • TZD 是時區指標 (Z、±hh:mm)。Z 代表世界標準時間,而 + 或 - 值則表示與世界標準時間相差多少。

時間碼資料的剖析方式

系統會從第一個影片影格解析內嵌時間碼。之後,輸出媒體時間戳記會逐格前進。輸入和輸出時間之間不會重新同步,除非輸入串流已中斷及重新連線。

由於影片的時間戳記會替換為時間碼產生的時間戳記,因此管道事件必須遵循時間碼時鐘,才能在指定時間正確執行。

如果製作管道中的時間碼產生器相同,或在主要和備份貢獻編碼器上鎖定,則可在備援串流上對齊時間。請參閱影片「輸出鎖定是什麼?」。

如何解讀輸入的時間碼

影像時間 SEI 訊息中的時間碼只包含時間 (16:30:00;10)。如要在輸出資訊清單中加入時間碼,則必須同時提供日期和時間,例如完整日期時間 (2021-12-06T16:30:00.333Z) 或紀元時間 (1638837000333)。

將 SEI 時間碼解讀為日期/時間格式時,Live Stream API 一律會假設傳入的輸入串流是即時或即時附近。Live Stream API 會使用頻道 timecodeConfig 中指定的時區,解讀 SEI 時間碼,盡可能將解讀結果設為與目前時間相近,但不得晚於目前時間。

舉例來說,假設 Live Stream API 在目前世界標準時間 2021-12-06T21:00:00Z 時收到輸入串流。下表說明如何將 SEI 時間碼轉換為日期/時間格式:

時區 ID SEI 時間碼 以當地時間解讀 解讀為世界標準時間
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

請注意,解讀的時間絕不會晚於 2021-12-06T21:00:00Z 目前的世界標準時間。