扣回

作为视频发布商,您可能希望阻止观看者 可让您跳过中贴片广告如果用户跳过广告插播时间点, 则可以返回广告插播时间点的开头,然后返回 在广告插播结束后,将用户跳转到其跳转位置。这个 这个功能叫做“snapback”。

有关示例,请参见下图。观看者正在观看视频,并决定从 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;
    }
  }
}