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 dalam band, ke dalam manifes pemutaran. Kemudian, Anda dapat menyinkronkan alur kerja media internal dengan konten live stream. Misalnya, Anda dapat mencocokkan anotasi metadata yang dihasilkan secara independen dengan konten live stream atau menyelaraskan konten siaran internal dengan output Live Stream API.

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

Gunakan kode waktu sematan

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 menyetel kolom timeZone. Lihat Cara kode waktu input ditafsirkan untuk detail selengkapnya.

Menyertakan kode waktu dalam manifes output

Anda dapat menetapkan kolom useTimecodeAsTimeline ke true guna menyertakan kode waktu untuk setiap manifes output:

"manifests": [
  {
    "file_name": "manifest.m3u8",
    "type": "HLS",
    "muxStreams": ["mux_720p", "mux_540p"],
    "useTimecodeAsTimeline": true
  },
  {
    "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 seperti 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 dengan mengikuti format ISO8601 YYYY-MM-DDThh:mm:ss[.mmm]TZD, dengan:

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

File manifes DASH

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

<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 dengan mengikuti format ISO8601 YYYY-MM-DDThh:mm:ss[.mmm]TZD, dengan:

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

Cara data kode waktu diuraikan

Kode waktu tersemat diuraikan dari frame video pertama. Stempel waktu media output adalah lanjutan frame demi frame setelahnya. Tidak ada sinkronisasi ulang antara waktu input dan output hingga stream 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 dijalankan dengan benar pada waktu yang ditentukan.

Waktu dapat diselaraskan pada streaming yang redundan jika generator kode waktu di pipeline produksi sama atau terkunci pada 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, diperlukan tanggal dan waktu, seperti tanggal dan waktu penuh (2021-12-06T16:30:00.333Z) atau waktu epoch (1638837000333).

Saat menafsirkan kode waktu SEI sebagai format tanggal waktu, Live Stream API selalu mengasumsikan streaming input yang masuk sedang live atau hampir live. Live Stream API menggunakan zona waktu yang ditentukan dalam timecodeConfig saluran untuk menafsirkan kode waktu SEI agar mendekati, tetapi tidak lebih dari, waktu saat ini.

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

ID zona waktu Kode waktu SEI Diterjemahkan sebagai dalam waktu setempat 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.