书签

本指南介绍了如何在为视频点播 (VOD) 视频流使用动态广告插播 (DAI) 时使用 IMA DAI SDK 实现书签。此操作假定您的 IMA DAI 实现有效,如 使用入门中提供的实现。

什么是书签?

书签功能可用于保存内容流中的某个特定点,然后返回该位置。假设用户观看了 5 分钟的内容后离开视频流,然后又返回。书签功能可以保存用户在直播中的位置,让直播能够从上次停下的地方继续观看,为观看者提供顺畅的体验。

深入了解 DAI 书签

为 DAI 视频流添加书签时,您必须记录视频流 ID 和用户离开视频的时间。当用户返回时,重新请求该数据流并跳转到保存的时间。由于所请求视频流的每个实例都有时长不同的广告插播时间点,因此节省视频流时间是不可行的。您真正希望从相同的内容时间继续。

备用的转换方法

IMA DAI SDK 提供了一对方法来请求指定流式传输时间内容时间和指定内容时间流式传输时间。使用这些转换方法,您可以存储已添加书签的内容时间,然后在数据流的新实例中找到相应的流式传输时间。下面是此方法,其中包括一个示例应用的链接,该应用展示了有效的书签实现。

正在保存书签

在 Activity 暂停后保存书签。

- (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;
    ...
    }
  }
}

正在加载书签

重新请求直播时加载书签。它是实现 VideoStreamPlayer 接口的一部分。

- (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;
    }
  }
}

示例应用

示例应用