回溯

身為影片發布商,您可能會想要防止觀眾略過片中廣告。當使用者搜尋某個廣告插播時間點時,你可以將他們帶回廣告插播開始,然後在廣告插播結束後回到他們尋找的位置。這項功能稱為「預約」。

例如,請參考下方的圖表。您的觀眾正在觀看影片,並決定從 5 分鐘標記開始,直到 15 分鐘才開始觀看。 但在 10 分鐘的廣告插播中,您會希望廣告插播 10 分鐘,才讓他們在影片結束後觀看。

如要顯示這個廣告插播,請採取下列步驟:

  1. 檢查使用者是否跳轉了未觀看的廣告插播時間點,如果是的話,請回到廣告插播時間點。
  2. 廣告插播結束後,將他們移回原本的尋找目標。

在圖表形式中,如下所示:

以下說明如何在 Android IMA SDK 中導入這個工作流程 (如進階範例中所述)。

防止不觀看廣告插播繼續觀看

檢查使用者是否執行了之前未觀看的廣告插播時間點。如果有,請回到廣告插播。在 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;
}