保存和加载广告连播书签

本指南介绍了在为视频点播 (VOD) 串流使用动态广告插播 (DAI) 时,如何使用 IMA DAI SDK 实现书签功能。这假定您已成功实现 IMA DAI,例如开始使用中所述的实现。

什么是书签?

书签功能可用于保存内容流中的某个具体点,方便之后返回同一位置。假设一位用户观看某内容 5 分钟后离开了相应视频流,然后又返回观看。由于书签可保存用户在视频流中的位置,因此用户返回时便可从上次停下的位置继续观看,畅享流畅一致的体验。

DAI 书签的内部运作

为 DAI 直播添加书签时,您必须记录直播 ID 和用户离开视频的时间。当用户返回时,重新请求数据流并跳转到保存的时间点。由于请求的直播的每个实例都可能包含时长不同的广告插播,因此仅保存直播时间是行不通的。您真正想做的是从同一内容时间继续播放。

转化方法大显身手

IMA DAI SDK 提供了一对方法,用于请求给定直播时间内容时间,以及给定内容时间直播时间。使用这些转换方法,您可以存储书签的内容时间,然后在数据流的新实例中跳转到相应的数据流时间。以下是该方法,其中包含指向一个示例应用的链接,该示例应用展示了有效的书签实现。

保存和加载广告连播书签

在内容播放器暂停时保存书签。

onPause() {
   var bookmarkTime = Math.floor(
   streamManager.contentTimeForStreamTime(videoElement.currentTime));
}

正在加载书签

重新请求数据流时加载书签。

function loadUrl(url) {
  hls.on(Hls.Events.MANIFEST_PARSED, () => {
    var startTime = 0;
    if (bookmarkTime) {
      var startTime = streamManager.streamTimeForContentTime(bookmarkTime);
      // Seeking on load triggers the onSeekEnd event, so treat this seek as
      // if it's snapback. Without this, resuming at a bookmark kicks you
      // back to the ad before the bookmark.
      isSnapback = true;
    }
    hls.startLoad(startTime);
    videoElement.addEventListener('loadedmetadata', () => { videoElement.play(); });
  });
  hls.loadSource(url);
  hls.attachMedia(videoElement);
}

示例应用

下载示例应用,查看书签实现。