В этом руководстве показано, как реализовать закладки с помощью IMA DAI SDK при использовании динамической вставки рекламы (DAI) для потоков видео по запросу (VOD). Предполагается наличие работающей реализации IMA DAI, например, представленной в разделе «Начало работы» .
Что такое закладки?
Закладки — это возможность сохранять и возвращаться к определённому моменту в потоке контента. Предположим, пользователь смотрит пять минут контента, выходит из потока и затем возвращается к нему. Закладки сохраняют текущее положение пользователя в потоке, чтобы можно было продолжить просмотр с того места, где он остановился, обеспечивая зрителям бесперебойный просмотр.
Закладки DAI изнутри
При добавлении трансляции DAI в закладки необходимо записать идентификатор трансляции и время, когда пользователь покидает видео. Когда пользователь возвращается, повторно запросите трансляцию и найдите сохранённое время. Поскольку каждый экземпляр запрошенной трансляции может содержать рекламные паузы разной длительности, простое сохранение времени трансляции не сработает. На самом деле, вам нужно продолжить просмотр с того же времени .
Методы преобразования спешат на помощь
SDK IMA DAI предоставляет два метода для запроса времени контента для заданного времени потока и времени потока для заданного времени контента . Используя эти методы преобразования, можно сохранить время контента, добавленного в закладки, а затем искать соответствующее время потока в новом экземпляре потока. Ниже представлен подход, включая ссылку на пример приложения, демонстрирующего работающую реализацию закладок.
Сохранение закладок
Сохраните закладку, когда действие приостановлено.
- (void)viewWillAppear:(BOOL)animated {
...
self.bookmarkTime =
[self.streamManager contentTimeForStreamTime:CMTimeGetSeconds(
self.playerViewController.player.currentTime)];
}
Загрузка закладок
Загружайте закладку при повторном запросе потока. Это часть реализации интерфейса VideoStreamPlayer
.
- (void)streamManagerIsPlaybackReady:(IMAStreamManager *)streamManager {
...
if (self.bookmarkTime != 0) {
NSTimeInterval streamTime = [self.streamManager
streamTimeForContentTime:self.bookmarkTime];
[self.playerViewController.player
seekToTime:CMTimeMakeWithSeconds(streamTime, NSEC_PER_SEC)];
}
}