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