Atlanan bir reklam arasına geri dönme

Platform seçin: HTML5 Android iOS tvOS Roku

Video yayıncısı olarak, izleyicilerinizin videonun ortasında gösterilen reklamları atlamasını engellemek isteyebilirsiniz. Kullanıcı bir reklam arasını atladığında onu reklam arasının başlangıcına geri götürebilir ve reklam arası tamamlandıktan sonra daha önce gittiği oynatma konumuna döndürebilirsiniz. Bu özelliğe "geri sarma" denir.

Örnek olarak aşağıdaki şemaya bakın. İzleyiciniz bir video izlerken 5. dakikadan 15. dakikaya atlamaya karar veriyor. Ancak, 10. dakikada bir reklam arası var ve bu reklam arasını izlemeden sonraki içeriği izleyemezler:

Bu reklam arasını göstermek için aşağıdaki adımları uygulayın:

  1. Kullanıcının, izlenmemiş bir reklam arasını atlayarak ileri sarma işlemi yapıp yapmadığını kontrol edin. Yaptıysa kullanıcıyı reklam arasına geri götürün.
  2. Reklam arası tamamlandıktan sonra kullanıcıları orijinal oynatma konumlarına geri döndürün.

Bu durum, diyagramda şu şekilde görünür:

Bu iş akışını IMA DAI SDK'sında nasıl uygulayacağınızı AdvancedExample'da gösterildiği gibi aşağıda bulabilirsiniz.

İzleyicilerin, reklam arasını izlemeden geçmesini engelleme

Kullanıcının, izlenmemiş bir reklam arasını geçen bir sarma işlemi yapıp yapmadığını kontrol edin ve yaptıysa kullanıcıyı reklam arasına geri götürün. Android SDK'sında arama işlemini algılamak için PlayerControl nesnesini kullanın. Kullanıcı arama yaptığında SampleAdsWrapper tarafından uygulanan SampleHlsVideoPlayerCallback öğesinin onSeek() yöntemini tetikleyin. Bu yöntem (aşağıda açıklanmıştır), kullanıcının arama süresinden önce işaret noktasını kontrol eder. Reklam arası oynatılmamışsa kullanıcının başlangıçta istediği arama noktası yerine reklam arasının başına gidin ve bu arama noktasını snapBackTime'ya kaydedin.

@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));
}

Kullanıcıyı orijinal arama konumuna geri döndürme

Artık bir onAdBreakEnded etkinliği aldığınızda snapBackTime ayarlanıp ayarlanmadığını kontrol edin. Bu durumda, kullanıcının izlediği reklam arası, geri sarma özelliğinin sonucu olduğundan kullanıcıyı akışta o noktaya yönlendirin:

@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;
}