Kembali ke jeda iklan yang dilewati

Pilih platform: HTML5 Android iOS tvOS Roku

Sebagai penayang video, Anda mungkin ingin mencegah penonton melewati iklan mid-roll. Saat pengguna mencari melewati jeda iklan, Anda dapat mengembalikannya ke awal jeda iklan tersebut, lalu mengembalikannya ke lokasi pencarian setelah jeda iklan selesai. Fitur ini disebut "kembali ke posisi semula".

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

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

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

Dalam bentuk diagram, tampilannya seperti ini:

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

Mencegah pencarian keluar dari jeda iklan yang belum ditonton

Periksa apakah pengguna telah menjalankan pencarian yang melewati jeda iklan yang belum ditonton, dan jika ya, bawa mereka kembali ke jeda iklan. Untuk contoh Lanjutan iOS, gunakan interaksi pengguna dengan UI Anda untuk mendeteksi saat mereka menjalankan penelusuran. Pertahankan waktu mulai penelusuran untuk memeriksa apakah mereka telah melewati jeda iklan yang belum diputar dalam penelusuran mereka. Saat pengguna melepas kontrol video, bandingkan waktu saat ini dengan waktu jeda iklan terbaru. Jika jeda iklan terjadi setelah waktu mulai pencarian (artinya pengguna telah melompati jeda iklan) dan belum diputar, kembalikan pengguna ke awal jeda iklan. Selain itu, tetapkan tanda kembali ke posisi semula untuk diperiksa nanti di pengendali penyelesaian jeda iklan:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

Mengembalikan pengguna ke pencarian aslinya

Di pengendali akhir jeda iklan, periksa apakah jeda sebelumnya diputar sebagai hasil dari kembali ke posisi semula. Jika demikian, kembalikan pengguna ke tempat yang awalnya ingin mereka tuju (selama bukan di tengah jeda iklan yang baru saja diputar):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}