回溯

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

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

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

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

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

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

防止使用者在未觀看的廣告插播時間點暫停播放

檢查使用者執行的時間是否超過未觀看的廣告插播時間點,如果有的話,就可以回到廣告插播時間點。在 iOS 進階範例中,藉由使用者與使用者介面的互動,偵測使用者是否執行跳轉。請保留搜尋開始時間,檢查廣告客戶是否在搜尋過程中略過未播放的廣告插播。當使用者放開影片控制項時,請比較目前時間與最近的廣告插播時間。如果廣告插播時間點落在搜尋開始時間之後 (使用者已跳離廣告),且廣告尚未播放,請將其重新尋找到廣告插播的開頭。此外,請設定回傳標記,以便稍後在廣告插播完成處理常式中檢查:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

引導使用者回到原本的搜尋點

在廣告插播處理常式中,查看先前的廣告插播是否因回溯而播放的結果。如果是的話,請將使用者帶回原本想搜尋的位置 (只要不是剛才播放的廣告插播中間):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}