Penanda iklan

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 dalam adTagMacros 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.

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&macro=%%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&macro=123

Penanda iklan HLS

EXT-X-DATERANGE

Penggunaan #EXT-X-DATERANGE ditentukan dalam spesifikasi HTTP Live Streaming:

  • Tag #EXT-X-DATERANGE dengan atribut SCTE35-OUT menunjukkan titik sambungan awal jeda iklan.
  • Tag #EXT-X-DATERANGE dengan atribut SCTE35-IN menunjukkan titik splice akhir langsung dari jeda iklan.
  • Nilai untuk SCTE35-OUT dan SCTE35-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 atau EXT-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.