Menyinkronkan alur kerja media dengan konten live stream menggunakan kode waktu

Halaman ini menjelaskan cara menyinkronkan alur kerja media dengan konten live stream di Live Stream API menggunakan kode waktu. Fitur kode waktu memungkinkan Anda meneruskan input kode waktu, yang disediakan sebagai data in-band, ke dalam manifes pemutaran. Kemudian, Anda dapat menyinkronkan alur kerja media internal dengan konten live stream. Misalnya, Anda dapat mencocokkan anotasi metadata yang dibuat secara independen dengan konten live stream atau menyelaraskan konten siaran internal dengan output Live Stream API.

Data kode waktu harus mematuhi spesifikasi SMPTE 12M (lihat ST 12-2:2008). Untuk H264, data kode waktu dibawa dalam pesan informasi peningkatan tambahan waktu gambar (SEI). Untuk H265, data kode waktu dibawa dalam pesan SEI kode waktu.

Menggunakan kode waktu tersemat

Untuk menggunakan kode waktu yang disematkan dalam aliran input, tambahkan timecodeConfig berikut ke resource Channel:

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

Nilai default untuk kolom source adalah MEDIA_TIMESTAMP.

Secara default, zona waktu UTC digunakan untuk menafsirkan kode waktu. Untuk menggunakan zona waktu yang berbeda, tetapkan kolom timeZone atau utcOffset:

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

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

Waktu Musim Panas diperhitungkan saat menetapkan kolom timeZone. Lihat Cara kode waktu input ditafsirkan untuk detail selengkapnya.

Menyertakan kode waktu dalam manifes output

Anda dapat menetapkan kolom useTimecodeAsTimeline ke true untuk menyertakan kode waktu untuk setiap manifes 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 manifes HLS

Untuk live stream HLS, kode waktu ditampilkan sebagai tag #EXT-X-PROGRAM-DATE-TIME untuk setiap segmen dalam file manifes M3U8 media dan terlihat mirip dengan kode berikut:

#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 berisi data kode waktu yang dihasilkan mengikuti format ISO8601 YYYY-MM-DDThh:mm:ss[.mmm]TZD dengan:

  • YYYY adalah tahun empat digit
  • MM adalah bulan dua digit (misalnya, 03 adalah Maret)
  • DD adalah tanggal dua digit dalam sebulan (01 hingga 31)
  • T adalah karakter yang ditetapkan untuk menunjukkan awal elemen waktu
  • hh adalah dua digit jam (00 hingga 23, tidak termasuk AM/PM)
  • mm adalah dua digit menit (00 hingga 59)
  • ss adalah dua digit detik (00 hingga 59)
  • mmm adalah tiga digit milidetik (000 hingga 999)
  • TZD adalah penunjuk zona waktu (Z, ±hh:mm). Z mewakili UTC, dan nilai + atau - menunjukkan seberapa jauh di depan atau di belakang UTC.

File manifes DASH

Untuk streaming live DASH, atribut availabilityStartTime dalam file manifes MPD ditetapkan ke kode waktu awal dan terlihat mirip dengan berikut:

<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 berisi data kode waktu yang dihasilkan mengikuti format ISO8601 YYYY-MM-DDThh:mm:ss[.mmm]TZD dengan:

  • YYYY adalah tahun empat digit
  • MM adalah bulan dua digit (misalnya, 03 adalah Maret)
  • DD adalah tanggal dua digit dalam sebulan (01 hingga 31)
  • T adalah karakter yang ditetapkan untuk menunjukkan awal elemen waktu
  • hh adalah dua digit jam (00 hingga 23, tidak termasuk AM/PM)
  • mm adalah dua digit menit (00 hingga 59)
  • ss adalah dua digit detik (00 hingga 59)
  • mmm adalah tiga digit milidetik (000 hingga 999)
  • TZD adalah penunjuk zona waktu (Z, ±hh:mm). Z mewakili UTC, dan nilai + atau - menunjukkan seberapa jauh di depan atau di belakang UTC.

Cara data kode waktu diuraikan

Kode waktu tersemat diuraikan dari frame video pertama. Stempel waktu media output akan maju frame demi frame setelahnya. Tidak ada sinkronisasi ulang antara waktu input dan output hingga aliran input terputus dan terhubung kembali.

Karena stempel waktu video diganti dengan stempel waktu yang dihasilkan dari kode waktu, peristiwa saluran harus mengikuti jam kode waktu agar dapat dieksekusi dengan benar pada waktu yang ditentukan.

Pengaturan waktu dapat disejajarkan pada streaming redundan jika generator kode waktu di pipeline produksi sama atau dikunci di encoder kontribusi utama dan cadangan (lihat video Apa yang dimaksud dengan Penguncian Output?).

Cara kode waktu input ditafsirkan

Kode waktu dalam pesan SEI pengaturan waktu gambar hanya berisi waktu (16:30:00;10). Untuk menyertakan kode waktu dalam manifes output, tanggal dan waktu diperlukan, seperti tanggal dan waktu lengkap (2021-12-06T16:30:00.333Z) atau waktu epoch (1638837000333).

Saat menafsirkan kode waktu SEI sebagai format tanggal dan waktu, Live Stream API selalu mengasumsikan bahwa aliran input yang masuk sedang aktif atau hampir aktif. Live Stream API menggunakan zona waktu yang ditentukan dalam timecodeConfig channel untuk menafsirkan kode waktu SEI agar sesegera mungkin, tetapi tidak lebih dari, waktu saat ini.

Misalnya, asumsikan Live Stream API menerima aliran input pada waktu saat ini 2021-12-06T21:00:00Z dalam UTC. Tabel berikut menunjukkan cara kode waktu SEI dikonversi ke format tanggal waktu:

ID zona waktu Kode waktu SEI Ditafsirkan sebagai waktu lokal Ditafsirkan sebagai dalam 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

Perhatikan bahwa waktu yang ditafsirkan tidak pernah lebih lambat dari waktu UTC saat ini 2021-12-06T21:00:00Z.