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 digitMM
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 waktuhh
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 digitMM
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 waktuhh
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
.