Jeda Iklan

Ringkasan

Web Receiver SDK memiliki dukungan native untuk jeda iklan dan iklan pengiring dalam streaming media tertentu. Platform ini menyediakan API untuk menetapkan posisi iklan, sumber iklan, dan perilaku jeda iklan, serta klip jeda iklan yang terkait. Dalam panduan ini, Break mengacu pada interval untuk pemutaran yang berisi satu atau beberapa iklan atau bumper, dan setiap iklan atau bumper disebut sebagai BreakClip. Jeda ini terkait dengan media yang sedang dimuat atau diputar.

Jenis iklan

Web Receiver SDK mendukung penyisipan iklan sisi klien (CSAI) dan penyisipan iklan yang digabungkan server (SSAI). Iklan gabungan klien dapat ditetapkan secara manual oleh aplikasi atau diekstrak dari file template VAST dan VMAP. Iklan yang digabungkan di server harus ditentukan secara manual sebelum konten dimuat sebagai iklan disematkan, atau secara dinamis selama pemutaran konten sebagai iklan diperluas yang disematkan. Penerapan untuk setiap jenis iklan tersebut dijelaskan secara detail di bawah.

dijahit dengan klien secara manual

Jeda iklan yang digabungkan secara manual oleh klien adalah jenis jeda iklan yang digabungkan oleh klien dan ditentukan secara manual oleh aplikasi menggunakan SDK API. Jenis iklan ini tidak disematkan dalam streaming konten utama. BreakClip harus menyediakan contentId yang merupakan URL yang mengarah ke konten iklan, contentType yang menjelaskan format konten iklan, dan title.

Break harus memiliki isEmbedded dan expanded yang ditetapkan ke nilai default false. position dapat disetel ke jeda iklan pre-roll, mid-roll, atau post-roll (lihat selengkapnya di bagian penempatan jeda). Saat menyiapkan iklan untuk diputar, Web Receiver SDK menghasilkan instance pemutar lain untuk memuat dan memutar konten iklan. Jeda ini memerlukan stitched timeline dan harus ditambahkan secara statis (lihat selengkapnya di bagian penyisipan iklan). Contoh di bawah menunjukkan penerapan dasar iklan yang digabungkan dengan klien secara manual:

// Create the BreakClip.
let clipClient = new cast.framework.messages.BreakClip('bc_client');
clipClient.title = 'The Ad Title to be displayed during playback';
clipClient.contentId = 'https://example.com/ad.m3u8';
clipClient.contentType = 'application/vnd.apple.mpegurl';

// Optional: Used when HLS ad container formats differ from the main content's.
clipClient.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;

// Create the Break using the BreakClip id above.
let breakPostrollClient = new cast.framework.messages.Break(
    'break_postroll_client', ['bc_client'], -1);
breakPostrollClient.isEmbedded = false; // Optional: default is false.
breakPostrollClient.expanded = false; // Optional: default is false.

VAST

Web Receiver SDK mendukung penambahan iklan VAST (Template Penayangan Iklan Video) standar IAB. Jika disediakan, template XML akan diuraikan untuk membuat klip jeda iklan berikutnya yang digabungkan oleh klien saat memasuki jeda.

Untuk membuat iklan VAST, aplikasi penerima harus membuat VastAdsRequest dan menentukannya di properti vastAdsRequest BreakClip. Objek VastAdsRequest harus memiliki properti adsResponse (representasi string dari template XML itu sendiri) atau adTagUrl (URL tempat template XML dihosting) yang ditentukan. Jika URL ditentukan, SDK akan menangani pengambilan template. Break yang dienkapsulasi mengikuti konvensi untuk iklan yang digabungkan oleh klien. Iklan ini dapat ditambahkan bersama iklan yang digabungkan dengan klien secara manual pada jeda yang sama atau jeda terpisah untuk konten yang sama. Contoh di bawah menunjukkan penerapan dasar iklan VAST:

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/ads.xml'

// Create the BreakClip.
let clipVast = new cast.framework.messages.BreakClip('bc_vast');
clipVast.vastAdsRequest = vastTemplate;

// Create the Break using the BreakClip id above.
let breakPostrollVast = new cast.framework.messages.Break(
    'break_postroll_vast', ['bc_vast'], -1);
breakPostrollVast.isEmbedded = false; // Optional: default is false.
breakPostrollVast.expanded = false; // Optional: default is false.

Saat Break yang berisi BreakClip VAST dimasukkan, SDK Penerima Web akan mengambil secara opsional, lalu mengurai template. Saat mengurai, SDK akan menghasilkan BreakClip baru dan mengisinya dengan nilai yang diekstrak dari template seperti contentId, contentType, title, duration, whenSkippable, dan clickThroughUrl. id untuk klip jeda iklan yang dihasilkan ditetapkan ke GENERATED:N dengan N adalah bilangan bulat yang bertambah 1 untuk setiap klip jeda VAST baru yang dibuat mulai 0. Iklan yang dihasilkan kemudian ditambahkan ke array BreakClip. Setiap id klip jeda VAST di Break saat ini kemudian diganti dengan id klip jeda iklan yang dihasilkan. Cuplikan di bawah ini mengilustrasikan perubahan pada pesan MEDIA_STATUS yang berkaitan dengan iklan sebelum dan sesudah memasuki jeda tersebut.

Informasi Break dan BreakClip sebelum memasuki jeda dengan iklan VAST.

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "bc_vast"
    ],
    "position": 0,
    "isWatched": false
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  }
]

Informasi Break dan BreakClip setelah memasuki jeda dengan iklan VAST.

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "GENERATED:0"
    ],
    "position": 0,
    "isWatched": true
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  },
  {
    "id": "GENERATED:0",
    "contentId": "https://example.com/break-clip-1.mpd",
    "contentType": "application/dash+xml",
    "title": "Ad Title Extracted from Template",
    "duration": 10,
    "whenSkippable": 5,
    "clickThroughUrl": "https://example.com/ad-target"
  }
]

VMAP

Web Receiver SDK mendukung standar VMAP (Video Multi-Iklan Playlist) IAB. Saat VMAP disediakan, Web Receiver SDK akan mengurai respons VMAP dan membuat objek Break yang digabungkan dengan klien untuk setiap entri <AdBreak> dalam respons. Tindakan ini juga akan menghasilkan BreakClips yang sesuai dengan objek vastAdsRequest untuk setiap entri <AdSource> yang diberikan di VMAP. Untuk mengaktifkan VMAP guna menyisipkan iklan ke konten Anda, aplikasi harus membuat objek VastAdsRequest dan menetapkannya ke properti vmapAdsRequest dari MediaInformation di LoadRequestData. Iklan ini harus disisipkan secara statis (lihat selengkapnya di bagian penyisipan iklan). Di bawah ini adalah cuplikan yang menguraikan pembuatan permintaan VMAP.

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/vmap.xml'

// Add it to the MediaInformation of the LoadRequest.
loadRequestData.media.vmapAdsRequest = vastTemplate;

disematkan

Jeda iklan tersemat adalah jenis jeda iklan yang digabungkan sisi server ke dalam streaming konten utama. Durasi Break dikurangi dari durasi konten utama saat menghitung waktu media.

BreakClip harus menyediakan duration konten iklan, dan title. Break harus memiliki isEmbedded yang ditetapkan ke true dan expanded ditetapkan ke false. position dapat ditetapkan sebagai jeda iklan pre-roll atau mid-roll. Jeda iklan post-roll didukung dengan nilai position persis yang positif. Lihat selengkapnya tentang hal ini di bagian pemosisian jeda. Saat iklan dipicu untuk diputar, Web Receiver SDK akan melanjutkan pemutaran streaming saat segmen iklan disematkan di dalamnya. Tidak ada mekanisme pemuatan tambahan untuk jenis iklan ini. Metadata iklan yang relevan ditampilkan kepada pengguna setelah titik pemutaran berada dalam rentang waktu jeda. Jeda ini memerlukan embedded timeline dan harus ditambahkan secara statis (lihat selengkapnya di bagian penyisipan iklan). Contoh di bawah ini menunjukkan penerapan dasar iklan embedded.

// Create the BreakClip.
let clipEmbedded = new cast.framework.messages.BreakClip('bc_embedded');
clipEmbedded.title = 'The Ad Title to be displayed during playback';
clipEmbedded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbedded = new cast.framework.messages.Break(
    'break_preroll_embedded', ['bc_embedded'], 0);
breakPrerollEmbedded.isEmbedded = true;
breakPrerollEmbedded.expanded = false; // Optional: default is false.

tersemat diperluas

Jeda iklan yang diperluas tersemat adalah jenis jeda iklan yang digabungkan dengan sisi server ke dalam streaming konten utama. Durasi Break disertakan dalam durasi konten utama saat menghitung waktu media.

BreakClip harus menyediakan duration konten iklan, dan title. Break harus memiliki isEmbedded yang ditetapkan ke true dan expanded ditetapkan ke true. position dapat ditetapkan sebagai jeda iklan pre-roll atau mid-roll. Jeda iklan post-roll didukung dengan nilai position positif. Lihat selengkapnya tentang hal ini di bagian pemosisian jeda. Saat iklan dipicu untuk diputar, Web Receiver SDK akan melanjutkan pemutaran streaming saat segmen iklan disematkan di dalamnya. Tidak ada mekanisme pemuatan tambahan untuk jenis iklan ini. Metadata iklan yang relevan ditampilkan kepada pengguna setelah titik pemutaran berada dalam rentang waktu jeda. Jeda ini memerlukan embedded timeline dan dapat ditambahkan secara statis atau dinamis (lihat selengkapnya di bagian penyisipan iklan). Contoh di bawah ini menunjukkan penerapan dasar iklan embedded expanded:

// Create the BreakClip.
let clipEmbeddedExpanded =
    new cast.framework.messages.BreakClip('bc_embedded_expanded');
clipEmbeddedExpanded.title = 'The Ad Title to be displayed during playback';
clipEmbeddedExpanded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbeddedExpanded = new cast.framework.messages.Break(
    'break_preroll_embedded_expanded', ['bc_embedded_expanded'], 0);
breakPrerollEmbeddedExpanded.isEmbedded = true;
breakPrerollEmbeddedExpanded.expanded = true;

Jenis linimasa pemain

Saat membuat instance pemutar, Web Receiver SDK memilih jenis linimasa untuk mendukung pemutaran iklan selama pemutaran konten. Setiap linimasa memungkinkan penambahan jenis jeda iklan tertentu. Jenis linimasa ditentukan oleh jenis iklan yang ada selama waktu pemuatan di MediaInformation dari LoadRequestData. Jika jeda iklan yang disematkan ada, linimasa embedded akan dipilih. Jika terdapat jeda iklan yang digabungkan oleh klien, linimasa stitched akan dipilih. Jika tidak ada iklan, SDK akan secara default menggunakan linimasa embedded. Setelah dipilih, linimasa tidak dapat diubah untuk item media saat ini. Tabel di bawah memberikan deskripsi mendetail tentang setiap linimasa.

Jenis Linimasa Deskripsi
linimasa tersemat Representasi waktu media yang mendukung iklan yang disematkan ke konten utama (jeda iklan disematkan dan diperluas tersemat). Jika ada jeda iklan yang tidak diperluas, durasinya akan dikurangi dari total durasi konten. Di sisi lain, jika ada jeda iklan yang diperluas, waktunya dianggap sebagai bagian dari konten utama.
linimasa yang digabungkan Representasi waktu media yang mendukung iklan yang bersumber dari file media eksternal (jeda iklan gabungan klien manual, VAST, dan VMAP). Saat ditambahkan, durasi jeda iklan bukan bagian dari durasi konten utama.

Gambar 1 sampai 3 di bawah menggambarkan beberapa konten dengan berbagai jenis iklan dan nilai linimasanya masing-masing. Konten dikonfigurasi dengan jeda pre-roll yang berisi dua klip jeda iklan serta jeda mid-roll dan post-roll yang berisi satu klip jeda. Waktu dinding sejak dimulainya pemutaran konten, waktu media konten utama, dan waktu klip jeda yang sedang diputar diselaraskan di bawah setiap gambar.

Linimasa iklan yang digabungkan dengan klien
Gambar 1: Linimasa yang mewakili beberapa konten dan 3 jeda iklan yang digabungkan oleh klien.


Linimasa iklan sematan yang digabungkan server
Gambar 2: Linimasa yang mewakili beberapa konten dan 3 jeda iklan tersemat yang digabungkan dengan server.


Linimasa iklan diperluas tersemat yang digabungkan server
Gambar 3: Linimasa yang mewakili beberapa konten dan 3 jeda iklan yang diperluas tersemat yang digabungkan dengan server.

Jeda posisi

Web Receiver SDK memungkinkan developer menentukan lokasi penempatan jeda iklan dengan menetapkan properti position dari Break. Nilai ini sesuai dengan waktu media konten utama dan dapat digunakan untuk membuat jeda iklan pre-roll, mid-roll, dan post-roll. Ini didefinisikan sebagai berikut:

Posisi Istirahat Deskripsi
pre-roll Jeda iklan yang diputar sebelum konten utama. Hal ini ditunjukkan dengan menetapkan breakPosition ke 0
mid-roll Jeda iklan yang diputar di tengah konten. Hal ini ditunjukkan dengan menyetel breakPosition ke waktu saat waktu mulai jeda lebih besar dari awal konten utama, dan waktu berakhir jeda kurang dari waktu berakhir konten utama.
post-roll Jeda iklan yang diputar setelah konten utama. Hal ini ditunjukkan dengan menetapkan breakPosition ke -1 untuk timeline yang digabungkan. Untuk linimasa sematan, breakPosition harus disetel ke durasi konten utama dikurangi durasi jeda. Tidak didukung untuk konten live.

Matriks interoperabilitas

Sebagai titik referensi cepat, Tabel 1 menampilkan ringkasan jenis iklan dan kompatibilitasnya dengan fitur terkait iklan.

Tabel 1: Matriks interoperabilitas iklan
Dukungan Fitur iklan yang digabungkan dengan klien secara manual VAST VMAP iklan tersemat iklan yang diperluas tersemat
kompatibel dengan VAST dijahit dengan klien secara manual T/A tersemat diperluas disematkan
rentang waktu digabungkan digabungkan digabungkan disematkan disematkan
penyisipan iklan static static static static statis, dinamis
penghapusan iklan
iklan pre-roll
iklan mid-roll
iklan di akhir video
lewati iklan
jeda intersepsi
memecahkan interseptor beban klip

Peristiwa

Saat peristiwa jeda tombol terjadi, SDK transmisi akan mengirim peristiwa berjenis BreaksEvent. Aplikasi penerima dapat berlangganan ke API tersebut menggunakan PlayerManager addEventListener API.

Peristiwa ini dapat digunakan untuk analisis dan pelacakan pemutaran iklan. Saat iklan VMAP (Playlist Multi-Iklan Video) dan VAST (Template Penayangan Iklan Video) digunakan, semua peristiwa pelacakan standar yang diberikan dalam respons akan otomatis dikirim oleh SDK.

Jenis peristiwa tercantum dalam Tabel 2 beserta deskripsi mendetail tentang kapan pengaktifan.

Siklus Proses Peristiwa Jeda
Gambar 4: Siklus proses peristiwa jeda.
Tabel 2: Peristiwa jeda iklan dan deskripsinya.
Peristiwa Jeda Deskripsi
BREAK_STARTED Diaktifkan saat waktu media saat ini untuk konten utama sama dengan position jeda yang belum ditonton.
BREAK_CLIP_LOADING Diaktifkan hanya saat klip jeda linimasa yang digabungkan mulai dimuat.
BREAK_CLIP_STARTED Diaktifkan saat klip jeda memulai pemutaran.
BREAK_CLIP_ENDED Diaktifkan saat klip jeda berakhir. endedReason akan diisi untuk keadaan berikut:
  • Klip jeda waktu yang digabungkan diputar sepenuhnya.
  • Garis waktu yang digabungkan akan memotong transisi klip ke klip jeda lainnya.
  • Semua klip jeda akan dilewati.
  • Klip jeda terakhir diputar sepenuhnya dalam jeda tersemat post-roll.
  • Terjadi error.
BREAK_ENDED Diaktifkan saat klip jeda terakhir dalam jeda berakhir.

Penyisipan iklan

SDK transmisi memungkinkan aplikasi menyisipkan dan menghapus iklan pada momen sesi transmisi yang berbeda. Dua jenis penyisipan iklan adalah statis dan dinamis. Penyisipan iklan statis mengharuskan iklan ditentukan di LoadRequestData sebelum pembuatan pemutar. Penyisipan iklan dinamis menggunakan BreakManager addBreak API untuk menyisipkan jeda dalam konten yang sudah dimuat. Setiap jenis metode penyisipan kompatibel dengan jenis iklan tertentu. Ringkasan kompatibilitas disediakan dalam matriks interoperabilitas.

Penyisipan iklan statis

Penyisipan iklan statis cirinya dengan menambahkan metadata iklan yang relevan sebelum pembuatan pemutar. Informasi ini disediakan di MediaInformation dari LoadRequestData. Misalnya, nilai ini dapat ditetapkan dalam permintaan pemuatan asli pengirim yang terhubung atau dapat disisipkan oleh aplikasi Penerima Web dengan mencegat permintaan LOAD. Setelah LoadRequestData ditampilkan ke SDK Penerima Web untuk diproses, pemutar akan dibuat. Lihat selengkapnya tentang memuat media. Contoh di bawah ini menunjukkan iklan yang digabungkan dengan klien secara manual yang ditambahkan dalam interseptor permintaan LOAD.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {

  // Create the BreakClip.
  let clipClient = new cast.framework.messages.BreakClip('bc_client');
  clipClient.title = 'The Ad Title to be displayed during playback';
  clipClient.contentId = 'https://example.com/ad.mp4';
  clipClient.contentType = 'video/mp4';

  // Create the Break using the BreakClip id above.
  let breakPostrollClient = new cast.framework.messages.Break(
      'break_postroll_client', ['bc_client'], -1);

  // Set the ad information in the load request data.
  let media = loadRequestData.media;
  media.breakClips = [clipClient];
  media.breaks = [breakPostrollClient];

  return loadRequestData;
});

Penyisipan iklan dinamis

Penyisipan iklan dinamis ditandai dengan menyetel jeda iklan selama pemutaran konten. Hal ini dilakukan dengan mendapatkan instance BreakManager dan memanggil addBreak API. Ini memerlukan setidaknya dua parameter, Break yang diperluas tersemat dan array BreakClip. Properti ketiga opsional disertakan untuk memaksa pengiriman perubahan kepada pengirim yang terhubung melalui siaran MediaStatus saat ditetapkan ke true. Saat menambahkan klip jeda dan jeda, ID yang sesuai harus unik. Iklan ini hanya dapat ditambahkan setelah pemutar dibuat. Web Receiver SDK mengaktifkan peristiwa PLAYER_LOADING setelah pemutar dibuat. Lihat contoh di bawah yang menampilkan penggunaan dalam pengendali peristiwa yang merespons perubahan dalam metadata ID3 aliran data dan membuat objek Break dan BreakClip untuk memasukkannya ke dalam linimasa.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.ID3, (event) => {

  // Create the BreakClip.
  let clipEmbeddedExpanded = parseBreakClipFromData(event.segmentData);
  let breakEmbeddedExpanded = parseExpandedBreakFromData(event.segmentData);

  // Add the break and break clip.
  breakManager.addBreak(breakEmbeddedExpanded, [clipEmbeddedExpanded]);
});

Penghapusan iklan dinamis

Untuk menghapus jeda dinamis, aplikasi harus memanggil removeBreakById selama pemutaran. Fungsi ini menggunakan ID string jeda yang akan dihapus dari linimasa. breakId yang ditentukan harus mengarah ke jeda iklan yang diperluas tersemat. Jika jenis jeda iklan lainnya terdeteksi, jeda tersebut akan tetap berada di linimasa. Lihat contoh di bawah ini yang menghapus jeda.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.removeBreakById('break_midroll_embedded_expanded');

Perilaku jeda

SDK menentukan perilaku default saat pemain masuk dan keluar serta menyediakan cara untuk menyesuaikannya lebih lanjut menggunakan beberapa API yang disediakan di BreakManager.

Perilaku jeda default

Saat Break dimasukkan melalui pemutaran reguler atau dengan mencari melalui Break, SDK akan mengevaluasi apakah pengguna telah melihatnya atau belum dengan memeriksa properti isWatched. Saat dibuat, nilai default jeda iklan untuk properti ini adalah false. Jika propertinya adalah true, jeda tidak akan diputar saat dimasukkan dan konten utama akan terus diputar. Jika propertinya adalah false, jeda akan diputar saat dimasukkan.

Saat mencari jeda sebelumnya, implementasi default akan memperoleh semua item Break yang position-nya berada di antara nilai seekFrom dan seekTo operasi pencarian. Dari daftar jeda ini, SDK akan memutar Break yang position-nya terdekat dengan nilai seekTo dan yang properti isWatched-nya ditetapkan ke false. Properti isWatched jeda iklan tersebut kemudian akan disetel ke true dan pemutar akan mulai memutar klip jedanya. Setelah jeda ditonton, konten utama akan melanjutkan pemutaran dari posisi seekTo. Jika tidak ada jeda tersebut, jeda tidak akan diputar dan konten utama akan melanjutkan pemutaran di posisi seekTo.

Selama pemutaran jeda, SDK akan menyiarkan update yang relevan ke aplikasi pengirim yang terhubung di MediaStatus. Aplikasi ini akan menggunakan siaran guna mengupdate UI-nya untuk iklan dengan membaca properti breakStatus. Properti ini hanya ditentukan selama pemutaran jeda.

Aplikasi penerima juga dapat langsung mengkueri informasi yang berkaitan dengan posisi titik pemutaran sehubungan dengan waktu saat ini dari BreakClip yang ditampilkan dengan memanggil PlayerManager getBreakClipCurrentTimeSec. Demikian pula, aplikasi dapat mengkueri durasi BreakClip saat ini dengan memanggil getBreakClipDurationSec.

Perilaku jeda kustom

Perilaku default untuk klip jeda dan jeda dapat diubah menggunakan metode setBreakClipLoadInterceptor dan setBreakSeekInterceptor yang disediakan di BreakManager.

Memecah intersepsi pencari

Interseptor pencarian jeda memungkinkan aplikasi mengontrol perilaku pencarian pada jeda iklan. Fungsi ini dipicu saat ada permintaan operasi pencarian yang mencari ke depan atau ke belakang melalui satu atau beberapa jeda. Saat dipanggil, BreakSeekData akan diteruskan sebagai parameter ke fungsi callback. Objek BreakSeekData berisi array objek Break yang properti position-nya ditetapkan ke angka antara waktu pemutaran saat ini yang ditentukan sebagai seekFrom dan waktu tujuan pencarian seekTo.

Interseptor ini memungkinkan objek Break pada jeda masing-masing untuk dimodifikasi. Saat diterapkan, interseptor pencari jeda harus menentukan jeda iklan mana yang akan diputar dengan menampilkan objek BreakSeekData yang dimodifikasi secara opsional. Pemain akan melanjutkan pemutaran semua jeda yang disertakan dalam nilai yang ditampilkan. Jika nilai null atau tidak ada yang ditampilkan dari interseptor pencari jeda, jeda akan dilewati.

Lihat contoh di bawah untuk mengetahui penerapan sederhana interseptor yang mengganti perilaku default untuk melihat semua jeda iklan yang dicari dengan pengecualian untuk jeda yang sudah ditonton.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakSeekInterceptor((breakSeekData) => {

  // Filter the breaks array by removing watched breaks.
  const unwatchedBreaks =
      breakSeekData.breaks.filter(adBreak => !adBreak.isWatched);
  breakSeekData.breaks = unwatchedBreaks;

  return breakSeekData;
});

Memecah intersepsi beban klip

Dengan menggunakan interseptor pemuatan klip jeda, objek BreakClip dapat diubah sebelum pemutarannya dimulai.

Interseptor pemuatan klip jeda hanya dipanggil untuk jeda linimasa yang digabungkan dan dapat ditetapkan menggunakan setBreakClipLoadInterceptor. Sebelum memasukkan Break, interseptor ini dipanggil satu kali untuk setiap BreakClip yang ditentukan dalam jeda tersebut. SDK meneruskan objek BreakClip asli sebagai parameter fungsi callback. Selanjutnya, aplikasi dapat mengubah BreakClip ini dan menampilkannya sehingga SDK dapat mengambil dan menampilkan klip jeda dengan konfigurasi yang telah diupdate. Jika null atau tidak ada yang ditampilkan, klip jeda akan dilewati.

Lihat di bawah untuk contoh yang memodifikasi contentUrl klip jeda iklan dengan panggilan fungsi utilitas getUrlFromClipId dengan id dari BreakClip dipetakan ke URL.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
    (breakClip, breakClipLoadInterceptorContext) => {

  // Obtains the URL of a break clip id from a function call.
  breakClip.contentUrl = getUrlFromClipId(breakClip.id);

  return breakClip;
});

Iklan Dilewati

Web Receiver SDK menyediakan API untuk melewati jeda iklan dan setiap klip jeda iklan dalam jeda iklan. SDK ini juga memungkinkan pengguna untuk secara opsional melewati klip jeda iklan dengan berinteraksi dengan aplikasi pengirim atau perangkat layar smart.

Klip jeda yang dapat dilewati pengguna

Menyetel klip jeda sebagai dapat dilewati memungkinkan pengguna berinteraksi dengan aplikasi pengirim yang terhubung dan perangkat layar smart untuk secara opsional melewati klip jeda yang sedang diputar. Menetapkan properti whenSkippable ke jumlah detik non-negatif akan mengaktifkan fitur ini untuk objek BreakClip. Pemutar akan menganggap klip jeda iklan dapat dilewati setelah klip jeda diputar selama jumlah detik tersebut. Menyetel nilai ini ke 0 memungkinkan pengguna untuk langsung melewati klip jeda.

// Create the BreakClip.
let clip = new cast.framework.messages.BreakClip('bc');
clip.title = 'The Ad Title to be displayed during playback';
clip.whenSkippable = 10; // Users can skip the clip after 10 seconds of playback.

Informasi ini dapat ditetapkan dalam permintaan pemuatan asli pengirim atau di aplikasi penerima. Jika dilewati, klip jeda iklan di jeda iklan linimasa yang digabungkan akan berhenti memutar klip jeda saat ini. Pemutar akan memuat klip jeda berikutnya jika ada atau memuat konten utama. Jika dilewati, klip jeda iklan di jeda iklan linimasa tersemat akan mencari ke akhir klip jeda iklan dan melanjutkan pemutaran streaming pada titik tersebut.

Melewati iklan secara terprogram

Iklan juga dapat dilewati secara otomatis tanpa interaksi pengguna.

Untuk melewati seluruh jeda pemutaran, aplikasi harus menetapkan properti isWatched dari Break ke true. Hal ini dapat dilakukan kapan saja selama urutan pemuatan atau pemutaran konten. Properti isWatched dievaluasi oleh pemain saat position jeda terpenuhi dalam waktu konten utama saat ini. Pada saat itu, pemain akan menentukan apakah jeda harus dimasukkan atau tidak. Lihat contoh di bawah ini yang melakukan loop melalui semua jeda dan mengubah nilai saat pemutar dimuat.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.PLAYER_LOADING,
    (event) => {

  // Obtain the breaks and iterate through each item to skip all ad breaks.
  let breaks = breakManager.getBreaks();
  breaks.forEach((brk) => {
    brk.isWatched = true;
  });
});

Untuk melewati klip jeda iklan tertentu secara terprogram, interseptor pemuatan klip jeda harus digunakan. Dengan menampilkan null atau tidak menampilkan nilai dalam fungsi callback, klip dalam jeda tersebut akan dilewati.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
      (breakClip, breakClipLoadInterceptorContext) => {
  return null;
});