Save and load ad stream bookmarks

  • Bookmarking in IMA DAI allows users to save and return to a specific point in a video-on-demand stream.

  • To implement DAI bookmarking, you need to store the stream id and content time when the user leaves the video and use conversion methods to find the corresponding stream time when they return.

  • The IMA DAI SDK provides methods to convert between stream time and content time, which is essential for accurate bookmarking across different instances of a stream.

  • Bookmarks are typically saved when the activity is paused and loaded when the stream is re-requested.

Select platform: HTML5 Android iOS tvOS Roku

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 timefor a given stream timeand the stream timefor a given content time. Using these conversion methods you can store the bookmarked content timeand then seek to the corresponding stream timein 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 we're presenting a modal view (e.g. in-app clickthrough). 
  
 if 
  
 ([ 
 self 
 . 
 navigationController 
 . 
 viewControllers 
  
 indexOfObject 
 : 
 self 
 ] 
  
 == 
  
 NSNotFound 
 ) 
  
 { 
  
 // Don't save bookmark if we're playing a live stream. 
  
 if 
  
 ( 
 self 
 . 
 video 
 . 
 streamType 
  
 != 
  
 StreamTypeLive 
 ) 
  
 { 
  
 NSTimeInterval 
  
 contentTime 
  
 = 
  
 [ 
 self 
 . 
 streamManager 
  
 contentTimeForStreamTime 
 : 
 CMTimeGetSeconds 
 ( 
 self 
 . 
 contentPlayer 
 . 
 currentTime 
 )]; 
  
 [ 
 self 
 . 
 delegate 
  
 videoViewController 
 : 
 self 
  
 didReportSavedTime 
 : 
 contentTime 
  
 forVideo 
 : 
 self 
 . 
 video 
 ]; 
  
 } 
  
 

Loading bookmarks

Load the bookmark when re-requesting a stream. It's part of implementing the VideoStreamPlayer interface.

  case 
  
 kIMAAdEvent_STREAM_LOADED 
 : 
  
 { 
  
 if 
  
 ( 
 self 
 . 
 video 
 . 
 streamType 
  
 == 
  
 StreamTypeVOD 
 ) 
  
 { 
  
 [ 
 self 
  
 addContentPlayerObservers 
 ]; 
  
 if 
  
 ( 
 self 
 . 
 video 
 . 
 savedTime 
 > 
 0 
 ) 
  
 { 
  
 NSTimeInterval 
  
 streamTime 
  
 = 
  
 [ 
 self 
 . 
 streamManager 
  
 streamTimeForContentTime 
 : 
 self 
 . 
 video 
 . 
 savedTime 
 ]; 
  
 [ 
 self 
 . 
 IMAVideoDisplay 
  
 seekStreamToTime 
 : 
 streamTime 
 ]; 
  
 self 
 . 
 video 
 . 
 savedTime 
  
 = 
  
 0 
 ; 
  
 } 
  
 } 
  
 

Sample app

Sample app

Create a Mobile Website
View Site in Mobile | Classic
Share by: