时移直播原理

时移直播基于常规的HLS视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发,用户请求的m3u8播放文件中包含不断刷新的TS分片地址;对于常规的HLS直播而言,TS分片地址及相应的TS文件并不持久化保存,导致当前时间之前的直播视频内容无法回溯;而对于开通了时移功能的HLS直播而言,TS分片地址及相应TS文件会分别在数据库和OSS中持久化保存最长15天,使得回溯从直播开始时间到当前时间之间的视频内容成为可能。

时移配置

时移功能可以在直播控制台自助开通使用。

时移请求参数

常规HLS直播地址形如 http://domain/app/stream.m3u8,为实现时移播放需要在此直播地址基础上追加时移相关参数。

必备参数

aliyunols=on
说明 通过CDN调用时移请求时必须携带此参数。

时间相关的参数

key格式:lhs_{type}_{format}_{unit}_{zone}
说明 参数名由4个变量组成,前缀固定为lhs_,变量之间用 "_" 隔开。变量的说明如下:
  • type:表示时间的类型。

    • start:开始时间。

    • end:直播结束时间。

    • vodend:点播结束时间。设置vodend表示使用点播模式回看,一次返回指定时间段内所有的ts,包含endlist标签。

    • offset:向前偏移的时间。

  • format:表示时间的格式。

    • unix:时间戳。

    • human:形如20170809230130。

  • unit: 时间的单位。

    • s:秒。

    • ms:毫秒。

    • us:微秒。

    • ns:纳秒。

  • zone:时区。

    • {0-9}:数字,表示东x区,0则表示UTC时间,中国为8。

示例

  • lhs_start_unix_s_0=1502280113
  • lhs_offset_unix_ms_8=1502308959375
  • lhs_end_human_s_8=20170809200010
请求示例
http://xxx.com/live/channel1.m3u8?aliyunols=on&lhs_start_human_s_8=20171024160220&lhs_end_human_s_8=20171024160420"
				

时间轴查询

查询某个流历史某段时间内哪些时间段有时移数据。

  • url:http://{$domain}/openapi/timeline/query

  • method:GET

  • params

    • app(required):app。

    • stream(required):流名。

    • format(required):指定查询ts或者flv格式的时移数据。

    • lhs_start_unix_s_0(required):开始时间的时间戳(单位s)。

    • lhs_end_unix_s_0(required):结束时间的时间戳(单位s)。
      说明 如果用户开启了CDN的鉴权,需要对应的加上鉴权参数。
  • response(JSON格式)。

    • current:表示当前系统时间,播放器可以基于这个字段对时。

    • timeline:一个数组,数组的元素是一个map,表示一段有效的时移时间段,包含如下字段。

    • timeline[i].start:有效片段的开始时间戳(单位s)。

    • timeline[i].end:有效片段的结束时间戳(单位s)。

  • example

    http://$host/openapi/timeline/query?app=bbb&domain=aaaa&format=ts&lhs_end_unix_s_0=1513334270&lhs_start_unix_s_0=1513334255&stream=cc
    					

    response

    {"retCode":0,"description":"success","content":{"current":1514269063,"timeline":[{"start":1514269054,"end":1514269058},{"start":1514269058,"end":1514269062}]}}'