Snapback

Sebagai penayang video, Anda sebaiknya mencegah penonton mencari melewati iklan mid-roll Anda. Saat pengguna mencari melewati jeda iklan, Anda dapat mengembalikan mereka ke awal jeda iklan, lalu mengembalikannya ke lokasi pencarian setelah jeda iklan selesai. Fitur ini disebut "snapback".

Sebagai contoh, lihat diagram di bawah. Penonton Anda sedang menonton video, dan memutuskan untuk mencari dari tanda 5 menit ke 15 menit. Namun, ada jeda iklan pada tanda 10 menit yang Anda inginkan untuk ditonton sebelum mereka dapat menonton konten setelahnya:

Untuk menampilkan jeda iklan ini, lakukan langkah-langkah berikut:

  1. Periksa apakah pengguna menjalankan pencarian yang melompat melewati jeda iklan yang belum ditonton, dan jika ya, arahkan mereka kembali ke jeda iklan.
  2. Setelah jeda iklan selesai, kembalikan jeda iklan ke pencarian aslinya.

Dalam bentuk diagram, tampilannya akan seperti ini:

Berikut cara menerapkan alur kerja ini di IMA DAI SDK, seperti yang dilakukan di AdvancedExample.

Mencegah pencarian agar tidak melewatkan jeda iklan

Periksa apakah pengguna telah menjalankan pencarian yang melewati jeda iklan yang belum ditonton, dan jika demikian, arahkan mereka kembali ke jeda iklan. Di Android SDK, gunakan objek PlayerControl untuk mendeteksi pencarian. Saat pengguna mencari, picu metode onSeek() dari SampleHlsVideoPlayerCallback yang diimplementasikan oleh SampleAdsWrapper. Metode tersebut (ditampilkan di bawah) memeriksa titik tanda sebelum waktu pencarian pengguna. Jika belum diputar, cari ke awal jeda iklan, bukan titik pencarian awal yang diinginkan, dan simpan titik pencarian yang diinginkan di snapBackTime.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

Mengembalikan pengguna ke pencarian awalnya

Sekarang, saat Anda mendapatkan peristiwa onAdBreakEnded, periksa apakah snapBackTime sudah ditetapkan. Jika ya, arahkan pengguna ke titik tersebut dalam streaming, karena jeda iklan yang baru saja mereka tonton adalah hasil dari snapback:

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}