作为视频发布商,您可能希望阻止观看者跳过您的中贴片广告。当用户跳过广告插播时间点时,您可以将他们返回到该广告插播时间点的开头,然后在广告插播结束后返回到其跳转位置。此功能称为“快速恢复”。
例如,请参见下图。您的观看者正在观看视频,并决定从 5 分钟标记切换到 15 分钟标记。然而,在 10 分钟标记处设置广告插播时间点,您希望观看者在看完视频后观看内容:
若要显示此广告插播时间点,请按以下步骤操作:
- 检查用户是否在执行搜索时跳过了未观看的广告插播时间点,如果是,则使用户返回到广告插播时间点。
- 广告插播时间点结束后,返回到其原始跳转位置。
在示意图中,如下所示:
下文说明了如何在 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;
}
}
}