直播时移回看功能介绍

  • 有些播放器需要支持在播放直播流的同时满足用户通过拖动进度条观看之前录像的需求,而实际上,播放器在往回拖动的时候会生成一个带时间参数的请求,我们需要响应该请求。由于该功能需要观看之前的录制,所以支持该功能前需要开启录制的功能。
  • 举个简单的例子,播放器中播放直播流的请求是 http://xxx.com/app/stream.m3u8,那么通过拖动回看的请求则是 http://xxx.com/app/stream.m3u8?start_time=1223333333,我们会根据 start_time 生成一个从该时间点开始的 m3u8 文件来进行播放。

直播时移回看的具体流程

  • 用户请求到边缘,边缘服务根据请求的域名判断该域名是否开启时移并且匹配时移的参数
  • 如果匹配,则需要重定向到一个支持时移的固定的点播域名,并将直播域名通过参数的形式带上
  • 播放器再请求点播域名后,再从边缘请求到中转,然后中转回源的时候回到了我们支持时移的服务节点 dynamic
  • dynamic 根据请求的 Uri 以及参数中带的直播域名、开始时间去录制数据库中查询,并生成一个带嵌套 m3u8 的 m3u8 内容,该嵌套的 m3u8 中带有相应的 session
  • 播放器带上 session 再请求一遍,再走到中转的 dynamic 服务时,我们才会吐出带有 ts 的 m3u8 内容

流程图

总结

  • 直播时移回看的功能依赖于录制支持 ts 的格式,有了这个前提,只要动态构造出 m3u8 文件就可以完美支持时移回看功能了。