直播时移可以回看从直播开始时间到当前时间之间的直播视频。通过阅读本文,您可以了解直播时移的实现原理及请求方式。
时移原理
视频直播流会被切成TS切片,通过HLS协议向播放用户分发,用户请求的M3U8播放列表中包含不断刷新的TS切片地址。对于常规的HLS直播,TS切片地址及对应的TS文件无法保存,因此当前时间之前的视频直播内容无法进行回溯。在开启直播时移功能后,TS切片地址及对应的TS文件会分别在数据库和OSS中保存(最长30天),可以回溯从直播开始时间到当前时间之间的视频。
时移配置
直播时移功能可以在视频直播控制台配置。具体操作,请参见直播时移。
时移请求参数
常规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(当format为unix时,该参数值为0)。
示例
lhs_start_human_s_8=20170809200010
lhs_start_unix_s_0=1502280113
lhs_end_human_s_8=20170809200010
lhs_vodend_unix_s_0=1502280113
lhs_offset_unix_ms_0=1800000(向前时移30min)
请求示例
http://example.com/live/channel1.m3u8?aliyunols=on&lhs_start_human_s_8=20171024160220&lhs_end_human_s_8=20171024160420
时间轴查询
查询某个流历史某段时间内哪些时间段有时移数据。
url:
http://{$domain}/openapi/timeline/query
说明此处的{$domain}需替换为自己的播流域名。
method:GET
params
aliyunols(required):on
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://{$domain}/openapi/timeline/query?aliyunols=on&app=bbb&stream=cc&format=ts&lhs_end_unix_s_0=1513334270&lhs_start_unix_s_0=1513334255
带鉴权的示例:
http://{$domain}/openapi/timeline/query?auth_key=1606204918-0-0-3e898a5f491fedb113d17aad7c091dde&aliyunols=on&app=zzb-test&stream=zzb-shiyi&format=ts&lhs_start_unix_s_0=1606200900&lhs_end_unix_s_0=1606202520
鉴权生成:直播也提供了API生成鉴权URL的方式,详情参考鉴权代码示例。
response
{"retCode":0,"description":"success","content":{"current":1514269063,"timeline":[{"start":1514269054,"end":1514269058},{"start":1514269058,"end":1514269062}]}}'