Как издатель видео, вы можете захотеть запретить зрителям искать видео после рекламы в середине ролика. Когда пользователь ищет видео после рекламной паузы, вы можете вернуть его к началу этой паузы, а затем вернуть его в исходное положение после её завершения. Эта функция называется «обратным переходом».
В качестве примера см. диаграмму ниже. Ваш зритель смотрит видео и решает просмотреть его с 5-й по 15-ю минуту. Однако на 10-й минуте есть рекламная пауза, которую вы хотите, чтобы зритель посмотрел, прежде чем он сможет посмотреть следующий контент:
Чтобы показать эту рекламную паузу, выполните следующие действия:
- Проверьте, выполнил ли пользователь поиск, который переместился за пределы непросмотренной рекламной паузы, и если да, верните его к рекламной паузе.
- После завершения рекламной паузы верните их в исходное положение.
В виде диаграммы это выглядит так:
Вот как реализовать этот рабочий процесс в IMA DAI SDK, как это сделано в AdvancedExample .
Не допускайте, чтобы поиск оставлял рекламную паузу непросмотренной
Проверьте, не запустил ли пользователь поиск, который прошёл мимо непросмотренной рекламной паузы, и если да, верните его к рекламной паузе. В примере iOS Advanced используйте взаимодействие пользователя с вашим пользовательским интерфейсом, чтобы определить, запустил ли пользователь поиск. Сохраните время начала поиска, чтобы проверить, прошёл ли он мимо непросмотренной рекламной паузы. Когда пользователь отпускает элементы управления видео, сравните его текущее время с временем последней рекламной паузы. Если рекламная пауза наступает после времени начала поиска (то есть пользователь пропустил её), и она ещё не была воспроизведена, верните его к началу рекламной паузы. Также установите флаг возврата для последующей проверки в обработчике завершения рекламной паузы:
- (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;
}
}
}