直播時移可以回看從直播開始時間到目前時間之間的直播視頻。通過閱讀本文,您可以瞭解直播時移的實現原理及請求方式。
時移原理
ApsaraVideo for Live流會被切成TS切片,通過HLS協議向播放使用者分發,使用者請求的M3U8播放清單中包含不斷重新整理的TS切片地址。對於常規的HLS直播,TS切片地址及對應的TS檔案無法儲存,因此目前時間之前的ApsaraVideo for Live內容無法進行回溯。在開啟直播時移功能後,TS切片地址及對應的TS檔案會分別在資料庫和OSS中儲存(最長30天),可以回溯從直播開始時間到目前時間之間的視頻。
時移配置
直播時移功能可以在ApsaraVideo for Live控制台配置。具體操作,請參見直播時移。
時移請求參數
常規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}]}}'