作为视频发布商,您可能希望阻止观看者 可让您跳过中贴片广告如果用户跳过广告插播时间点, 则可以返回广告插播时间点的开头,然后返回 在广告插播结束后,将用户跳转到其跳转位置。这个 这个功能叫做“snapback”。
有关示例,请参见下图。观看者正在观看视频,并决定从 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;
}
}
}