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