AI-generated Key Takeaways
-
This guide explains how to implement bookmarking in video-on-demand (VOD) streams using the IMA DAI SDK for a seamless viewing experience.
-
Bookmarking involves saving the user's content time, not just the stream time, to ensure accurate resumption upon return.
-
The IMA DAI SDK provides methods to convert between stream time and content time, which are crucial for bookmarking functionality.
-
Saving bookmarks involves recording the content time when the user pauses the video, while loading bookmarks requires seeking to the corresponding stream time in the new stream instance.
-
A sample app demonstrating bookmarking implementation is available on GitHub.
This guide shows how to implement bookmarking using the IMA DAI SDK when using Dynamic Ad Insertion (DAI) for video-on-demand (VOD) streams. This assumes a working IMA DAI implementation, such as the one presented in Get Started.
What is bookmarking?
Bookmarking is the ability to save and then return to a specific point in the content stream. Suppose a user watches five minutes of content, leaves the video stream, and then returns to it. Bookmarking saves the user's position in the stream so the stream can pick up from where it left off, providing a seamless experience to the viewer.
DAI bookmarking under the hood
When bookmarking a DAI stream, you must record the stream id and time when the user leaves the video. When the user returns, re-request the stream and seek to the saved time. Since each instance of the requested stream can have ad breaks of different durations simply saving the stream time won't work. What you really want to do is continue from the same content time.
Conversion methods to the rescue
The IMA DAI SDK provides a pair of methods to request the content time for a given stream time and the stream time for a given content time. Using these conversion methods you can store the bookmarked content time and then seek to the corresponding stream time in the new instance of the stream. Here's the approach, including a link to a sample app that shows a working bookmarking implementation.
Saving bookmarks
Save a bookmark when the Activity is paused.
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.contentPlayer pause];
// Ignore this if you're presenting a modal view (e.g. in-app clickthrough).
if ([self.navigationController.viewControllers indexOfObject:self] ==
NSNotFound) {
NSTimeInterval contentTime =
[self.streamManager contentTimeForStreamTime:CMTimeGetSeconds(
self.contentPlayer.currentTime)];
self.video.savedTime = contentTime;
...
}
}
Loading bookmarks
Load the bookmark when re-requesting a stream. It's part of implementing
the VideoStreamPlayer
interface.
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
...
case kIMAAdEvent_STREAM_LOADED: {
if (self.video.savedTime > 0) {
NSTimeInterval streamTime =
[self.streamManager streamTimeForContentTime:self.video.savedTime];
[self.IMAVideoDisplay.playerItem
seekToTime:CMTimeMakeWithSeconds(streamTime, NSEC_PER_SEC)];
self.video.savedTime = 0;
}
}
}