直播時移可以回看從直播開始時間到當前時間之間的直播視頻。通過閱讀本文,您可以了解直播時移的實現原理及請求方式。
時移原理
視頻直播流會被切成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}]}}'