返回略過的廣告時段

選取平台: HTML5 Android iOS tvOS Roku

影片發布者可能會想避免觀眾略過片中廣告。使用者略過廣告時段時,您可以將他們帶回該廣告時段的開頭,等廣告時段結束後再將他們帶往搜尋位置。這項功能稱為「返回」。

請參閱下圖範例。觀眾正在觀看影片,並決定從 5 分鐘標記處快轉到 15 分鐘標記處。不過,您希望觀眾在觀看 10 分鐘的廣告後,再繼續觀看後續內容:

如要顯示這段廣告插播,請按照下列步驟操作:

  1. 檢查使用者是否略過未觀看的廣告插播時間點, 如果是,請將他們帶回廣告插播時間點。
  2. 廣告時段結束後,再將他們帶往原始搜尋位置。

以圖表形式表示如下:

以下說明如何在 IMA DAI SDK 中實作這項工作流程,如AdvancedExample所示。

避免搜尋時略過廣告插播時間點

檢查使用者是否略過未觀看的廣告插播,如果是,請將他們帶回廣告插播。 在 Android SDK 中,使用 PlayerControl 物件偵測搜尋。 使用者搜尋時,請觸發 SampleAdsWrapper 實作的 SampleHlsVideoPlayerCallback onSeek() 方法。該方法 (如下所示) 會在使用者搜尋時間之前檢查提示點。如果廣告時段尚未播放,請改為從廣告時段開頭開始播放,而非從使用者最初想開始播放的位置,並將該位置儲存在 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));
}

讓使用者回到原始搜尋位置

現在收到 onAdBreakEnded 事件時,請檢查是否已設定 snapBackTime。如果是,請將使用者帶到串流中的該時間點,因為他們剛才觀看的廣告插播是自動返回的結果:

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