Panduan ini menjelaskan penanda iklan yang didukung oleh Video Stitcher API. Video Stitcher API mengidentifikasi batas jeda iklan berdasarkan penanda iklan dalam manifes HLS/DASH sumber live stream dan melakukan penyambungan iklan dalam jeda iklan untuk setiap sesi live stream.
Sebelum memulai
Pastikan Anda memahami konsep dan terminologi pengantar di Video Stitcher API. Untuk mengetahui informasi selengkapnya, lihat Ringkasan teknis.
Lihat spesifikasi SCTE-35 Pesan Isyarat Penyisipan Program Digital untuk Kabel.
Perintah SCTE-35
Penanda iklan live stream diwakili oleh sinyal SCTE-35 standar. Dalam daftar perintah SCTE-35, Video Stitcher API mendukung dua perintah berikut:
splice_insert
time_signal
Dengan time_signal
, Anda dapat memberikan metadata arbitrer tambahan untuk
jeda iklan terkait dalam ID program unik (UPID) segmentasi pertama.
Video Stitcher API mengharapkan segmentation_upid_type
menjadi 0x0C
, yang
berarti MPU()
. private_data
dalam MPU()
harus berupa string JSON berenkode base64, dengan kunci JSON tertentu dicadangkan untuk tujuan khusus berikut:
%%AD_TAG_ID%%
: Menentukan tag iklan yang akan digunakan untuk jeda iklan. ID tag iklan harus menjadi salah satu kunci dalamadTagMacros
sesi live.%%SLATE_ID%%
: Menentukan slate yang akan digunakan untuk jeda iklan. ID slate harus cocok dengan ID untuk slate yang telah dibuat di project Google Cloud yang sama.
Semua pasangan nilai kunci lainnya dalam payload UPID digunakan untuk penggantian makro tag iklan.
Misalnya, jika URI tag iklan adalah https://example.com?key=[foo]
, dan private_data
adalah eyJmb28iOiJiYXIifQ==
, yang merupakan representasi base64 dari {"foo":"bar"}
,
Video Stitcher API akan mengganti [foo]
dengan bar
, dan membuat permintaan tag iklan
ke https://example.com?key=bar
.
Integrasi Google Ad Manager
Untuk alur kerja integrasi Google Ad Manager, pesan SCTE35 dapat berisi nilai tertentu yang dapat diganti di tag iklan. Lihat daftar makro yang didukung.
Pastikan adTagUri
yang terdaftar di konfigurasi live
berisi makro yang dipilih.
Misalnya, jika pesan SCTE35 meneruskan nilai untuk
%%SPLICE_INSERT_EVENT_ID%%
, pastikan makro ada di adTagUri
seperti
yang diilustrasikan oleh contoh berikut:
AD_TAG_URI¯o=%%SPLICE_INSERT_EVENT_ID%%
Saat Video Stitcher API meminta metadata iklan dan pesan splice_insert
SCTE35 memiliki splice_insert_event_id
yang ditetapkan ke 123
, API ini akan menggunakan tag iklan berikut:
AD_TAG_URI¯o=123
Penanda iklan HLS
EXT-X-DATERANGE
Penggunaan #EXT-X-DATERANGE
ditentukan dalam
spesifikasi HTTP Live Streaming:
- Tag
#EXT-X-DATERANGE
dengan atributSCTE35-OUT
menunjukkan titik sambungan awal jeda iklan. - Tag
#EXT-X-DATERANGE
dengan atributSCTE35-IN
menunjukkan titik splice akhir langsung dari jeda iklan. - Nilai untuk
SCTE35-OUT
danSCTE35-IN
diharapkan dienkode hex.
Contoh:
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,SCTE35-OUT=0xFC302000000000000000FFF00F050000006F7FFF7E002932E0000000000000235EE5EF
...
#EXT-X-DATERANGE:ID="111",START-DATE=START_DATE,END-DATE=END_DATE,SCTE35-IN=0xFC302000000000000000FFF00F050000006F7F7F7E002932E0000000000000D56C4036
EXT-X-CUE-OUT dan EXT-X-CUE-IN
Tag #EXT-X-CUE-OUT
menunjukkan awal jeda iklan yang segera dimulai, dan
tag #EXT-X-CUE-IN
menunjukkan akhir jeda iklan yang segera berakhir.
Tag #EXT-OATCLS-SCTE35
dapat digunakan untuk pesan SCTE-35, dan nilainya diharapkan dienkode base64.
Contoh (tanpa pesan SCTE-35):
#EXT-X-CUE-OUT:DURATION=30
...
#EXT-X-CUE-IN
Contoh (dengan pesan SCTE-35):
#EXT-OATCLS-SCTE35:/DBBAAAAAAAAAP/wBQb+AAaXgAArAilDVUVJAAAAb3//AAApMuAMFXslJUFEX1RBR19JRCUlOnRhZy0xfTQAALOJefk=
#EXT-X-CUE-OUT:30
...
#EXT-X-CUE-IN
Jika durasi tag EXT-X-CUE-OUT
ditentukan, nilai tersebut
akan diprioritaskan meskipun durasi jeda iklan dalam pesan SCTE-35 bertentangan
dengannya. Jika durasi tag EXT-X-CUE-OUT
tidak ditentukan dan salah satu tag
ditentukan dalam pesan SCTE-35 terkait, nilai dari pesan
SCTE-35 akan digunakan.
Penanda iklan DASH
Saat ini, Video Stitcher API hanya mendukung manifes DASH multi-periode. Dalam
manifes DASH multi-periode, jeda iklan harus diwakili oleh
Period
dengan aliran peristiwa yang berisi penanda isyarat keluar. Penanda cue-in tidak
diperlukan karena akhir periode jeda iklan menunjukkan akhir jeda iklan.
Jika beberapa peristiwa cue-out ditampilkan dalam aliran peristiwa SCTE-35 periode jeda iklan, Video Stitcher API hanya akan menggunakan peristiwa pertama. Waktu presentasi peristiwa cue-out diabaikan karena waktu mulai jeda sama dengan waktu mulai periode.
Berikut adalah daftar schemeIdUri
yang didukung untuk aliran peristiwa SCTE-35:
urn:scte:scte35:2014:xml+bin
urn:scte:scte35:2013:xml
urn:scte:scte35:2014:xml+bin
Aliran peristiwa yang schemeIdUri
-nya ditetapkan ke urn:scte:scte35:2014:xml+bin
berisi peristiwa yang mewakili pesan SCTE-35 dalam biner yang dienkode base64.
Contoh:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="90000">
<Event presentationTime="0" duration="5400000" id="1">
<Signal xmlns="urn:scte:scte35:2014:xml+bin">
<Binary xmlns="urn:scte:scte35:2014:xml+bin">/DBTAAAAAAAAAP/wBQb+AAaXgAA9AjtDVUVJAAAAAH//AABSZcAMJ3siJSVBRF9UQUdfSUQlJSI6InRhZy0xIiwiZGFzaCI6InRydWUifTQAABxkspA=</Binary>
</Signal>
</Event>
</EventStream>
...
</Period>
urn:scte:scte35:2013:xml
Aliran peristiwa yang schemeIdUri
-nya ditetapkan ke urn:scte:scte35:2013:xml
berisi peristiwa yang mewakili pesan SCTE-35 dalam XML yang jelas.
Contoh:
<Period start="PT444334H55M0.010S" id="break-1">
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="140429" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
Notifikasi jeda iklan awal untuk live stream
Untuk penyambungan live, tag iklan diproses secara sinkron saat Video Stitcher API menerima penanda iklan cue-out dalam manifes live stream. Pemrosesan sinkron ini memicu permintaan tag iklan dalam jumlah besar dan menyebabkan penundaan yang lama untuk permintaan pemutaran sesi live jika streaming sangat banyak.
Notifikasi jeda iklan awal (EABN) memberi Video Stitcher API lebih banyak waktu untuk menyiapkan iklan dengan memberi tahu API tentang jeda iklan mendatang.
Notifikasi jeda iklan awal HLS
Untuk memberi tahu API tentang jeda iklan mendatang sehingga API dapat menyiapkan iklan terlebih dahulu, playlist HLS livestream harus:
- Menggunakan
#EXT-X-DATERANGE
atauEXT-X-CUE-OUT
sebagai penanda iklan - Mengulangi penanda iklan isyarat akan berakhir di manifes sumber live stream
#EXT-X-DATERANGE
Saat encoder sumber menjadwalkan jeda iklan mendatang, encoder dapat menyisipkan
penanda cue-out #EXT-X-DATERANGE
ke dalam manifes sumber. Atribut X-TYPE
penanda menunjukkan jenis penanda iklan; untuk notifikasi jeda iklan awal, nilai untuk X-TYPE
diharapkan adalah EABN
. Atribut
START-TIME
penanda menunjukkan waktu mulai jeda iklan yang sebenarnya atau yang direncanakan.
Atribut DURATION
penanda diperlukan untuk menunjukkan durasi
jeda iklan. Penanda ini disebut cue-out EABN.
Pada awal jeda iklan yang sebenarnya, encoder sumber harus menyisipkan
penanda cue-out #EXT-X-DATERANGE
ke dalam manifes sumber. Atribut ID
penanda harus sama dengan cue-out EABN yang sesuai. START-TIME
penanda
harus sama dengan waktu media segmen saat penanda ini
disisipkan. Penanda ini disebut cue-out langsung.
Contoh manifes berikut berisi satu cue-out EABN, satu cue-out langsung, dan satu cue-in:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-X-DATERANGE:ID="2415919105",X-TYPE="EABN",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-X-DATERANGE:ID="2415919105",START-DATE="2020-11-08T21:11:28.976Z",DURATION=29.988,SCTE35-OUT=0xFC303...
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-DATERANGE:ID="2415919105",END-DATE="2020-11-08T21:11:48.976Z",SCTE35-IN=0xFC303...
#EXTINF:4.000,
1028/segment_239968.ts
#EXT-X-CUE-OUT
- Menggunakan
#EXT-X-CUE-OUT
sebagai penanda iklan - Mengulangi penanda iklan isyarat akan berakhir di manifes sumber live stream
Saat encoder sumber menjadwalkan jeda iklan mendatang, encoder tersebut juga dapat menyisipkan
penanda cue-out #EXT-X-CUE-OUT
ke dalam manifes sumber. Atribut X-TYPE
penanda menunjukkan jenis penanda iklan; untuk notifikasi jeda iklan awal, nilai untuk X-TYPE
diharapkan adalah EABN
. Atribut DURATION
penanda harus menunjukkan durasi jeda iklan.
Penanda ini disebut cue-out EABN.
Pada awal jeda iklan yang sebenarnya, encoder sumber harus menyisipkan
penanda cue-out #EXT-X-CUE-OUT
ke dalam manifes sumber. Atribut ID
penanda harus sama dengan cue-out EABN yang sesuai. Penanda ini
disebut cue-out langsung.
Contoh manifes berikut berisi satu cue-out EABN, satu cue-out langsung, dan satu cue-in:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:7
#EXT-X-PROGRAM-DATE-TIME:2020-11-08T21:11:20.976Z
#EXT-X-MEDIA-SEQUENCE:239959
#EXT-X-DISCONTINUITY-SEQUENCE:2
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",X-TYPE="EABN",DURATION=29.988
#EXTINF:4.000,
1028/segment_239959.ts
#EXTINF:4.000,
1028/segment_239960.ts
#EXT-OATCLS-SCTE35:0xFC303...
#EXT-X-CUE-OUT:ID="2415919105",DURATION=29.988
#EXTINF:4.000,
1028/segment_239961.ts
#EXTINF:4.000,
1028/segment_239962.ts
#EXTINF:4.000,
1028/segment_239963.ts
...
#EXT-X-CUE-IN:ID="2415919105"
#EXTINF:4.000,
1028/segment_239968.ts
Notifikasi jeda iklan awal DASH
Untuk memberi tahu API tentang jeda iklan mendatang sehingga API dapat menyiapkan iklan terlebih dahulu,
manifes live stream DASH harus mengulangi Peristiwa penanda iklan di Main Period
dan
Ad Break Period
.
Kemunculan pertama di Main Period
akan memberi tahu API tentang jeda iklan
mendatang, dan kemunculan kedua di Ad Break Period
menunjukkan
awal jeda iklan.
Berikut adalah contoh manifes:
<MPD>
<Period id="1">
<!-- Main Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" presentationTime="53460000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT9M54S" id="2">
<!-- Ad Break Period -->
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="5400000" id="1">
<scte35:SpliceInfoSection>
<scte35:SpliceInsert outOfNetworkIndicator="true" spliceImmediateFlag="true">
<scte35:BreakDuration autoReturn="true" duration="5400000"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
...
</Period>
<Period start="PT10M54S" id="3">
<!-- Main Period -->
...
</Period>
</MPD>
Langkah selanjutnya
Pelajari cara menyelesaikan tugas Video Stitcher API tertentu.