回溯

影片發布商可能會想防止觀眾看到片中廣告。當使用者跳轉過去的廣告插播時,您可以將他們帶回廣告插播的開始處,然後在廣告插播結束後再讓他們回到搜尋位置。此功能稱為「snapback」。

請參考下圖範例。觀眾正在觀看影片,並決定從 5 分鐘到 15 分鐘的位置跳轉。但是,有一個在 10 分鐘標記的廣告插播時間點,就是您想讓他們在結束後觀看內容:

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

  1. 檢查使用者是否跳轉至未觀看的廣告插播時間點,如果是,就會讓他們回到廣告插播時間點。
  2. 廣告插播結束後,可以將觀眾回復為原本的跳轉。

在圖表中,如下所示:

以下說明如何在 IMA DAI SDK 中導入此工作流程,如AdvancedExample中所述。

避免跳轉至未觀看的廣告插播時間點

檢查使用者是否已執行某個搜尋點超過未觀看的廣告插播時間點,如果是,就會把他們帶回廣告插播時間點。在 Android SDK 中,使用 PlayerControl 物件偵測搜尋。使用者跳轉時,觸發 SampleAdsWrapper 實作 SampleHlsVideoPlayerCallbackonSeek() 方法。該方法 (如下所示) 會在使用者尋找時間前檢查提示點。如果並未播放,請跳轉至廣告插播的開頭 (而非最初的跳轉點),然後將所需搜尋點儲存在 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;
}