影片發布商可能會想防止觀眾看到 越過片中廣告使用者跳轉超過廣告插播時間點時,您可以將他們帶回該廣告插播的開頭,然後在廣告插播結束後將其傳回搜尋位置。此功能稱為「回歸」。
請參考下圖範例。觀眾正在觀看影片,然後選擇從 5 分鐘的標記開始跳轉至 15 分鐘。然而,在 10 分鐘標記處出現一段廣告插播時間點,表示您希望使用者在看完內容前看完廣告:
如要顯示這個廣告插播時間點,請按照下列步驟操作:
- 檢查使用者執行的跳轉是否超過未觀看的廣告插播時間點。如果可以,請將使用者重新回到廣告插播時間點。
- 廣告插播結束後,請返回原本的跳轉。
以圖表形式呈現,如下所示:
以下說明如何在 Android IMA 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;
}