回溯

影片發布商可能會想防止觀眾看到 越過片中廣告使用者跳轉超過廣告插播時間點時,您可以將他們帶回該廣告插播的開頭,然後在廣告插播結束後將其傳回搜尋位置。此功能稱為「回歸」。

請參考下圖範例。觀眾正在觀看影片,然後選擇從 5 分鐘的標記開始跳轉至 15 分鐘。然而,在 10 分鐘標記處出現一段廣告插播時間點,表示您希望使用者在看完內容前看完廣告:

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

  1. 檢查使用者執行的跳轉是否超過未觀看的廣告插播時間點。如果可以,請將使用者重新回到廣告插播時間點。
  2. 廣告插播結束後,請返回原本的跳轉。

以圖表形式呈現,如下所示:

以下說明如何在 Android IMA 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;
}