身為影片發布商,您可能會想要防止觀眾略過片中廣告。當使用者搜尋某個廣告插播時間點時,你可以將他們帶回廣告插播開始,然後在廣告插播結束後回到他們尋找的位置。這項功能稱為「預約」。
例如,請參考下方的圖表。您的觀眾正在觀看影片,並決定從 5 分鐘標記開始,直到 15 分鐘才開始觀看。 但在 10 分鐘的廣告插播中,您會希望廣告插播 10 分鐘,才讓他們在影片結束後觀看。
如要顯示這個廣告插播,請採取下列步驟:
- 檢查使用者是否跳轉了未觀看的廣告插播時間點,如果是的話,請回到廣告插播時間點。
- 廣告插播結束後,將他們移回原本的尋找目標。
在圖表形式中,如下所示:
以下說明如何在 Android IMA SDK 中導入這個工作流程 (如進階範例中所述)。
防止不觀看廣告插播繼續觀看
檢查使用者是否執行了之前未觀看的廣告插播時間點。如果有,請回到廣告插播。在 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;
}