直播時移可以回看從直播開始時間到目前時間之間的直播視頻。通過閱讀本文,您可以瞭解直播時移的實現原理及請求方式。
實現原理
ApsaraVideo for Live流會被切成TS切片,通過HLS協議向播放使用者分發,使用者請求的M3U8播放清單中包含不斷重新整理的TS切片地址。對於常規的HLS直播,TS切片地址及對應的TS檔案無法儲存,因此目前時間之前的ApsaraVideo for Live內容無法進行回溯。在開啟直播時移功能後,TS切片資訊以及檔案會進行儲存,從而實現從直播開始時間到目前時間之間的視頻回溯功能。
使用限制
直播時移最大支援直播觀看人數為10萬人,如果需要支援更多人觀看,請提交工單。關於如何提交工單,請參見聯絡我們。
使用情境
直播時移功能可以讓直播觀眾在直播過程中回看直播內容。比如在進行賽事直播時,通過時移功能可以讓觀眾像觀看影視劇一樣,回看賽事內容。
目前ApsaraVideo for Live有三種功能支援對直播內容進行回看,直播錄製,直播時移,直播截圖(直播截圖只能按頻率對直播內容進行截圖儲存,不適用於播放情境)。
其中直播錄製功能偏向直播結束後對直播內容進行播放,直播時移偏向直播過程中觀眾端對直播內容進行回放。
功能使用
使用直播時移,分兩部分內容:
進行直播時移功能配置。
說明功能需要配置,才能將直播內容進行儲存從而支援時移功能。
觀眾端發起請求使用時移功能。
配置直播時移功能
ApsaraVideo for Live目前支援兩種方式進行直播時移功能配置。
使用直播時移功能
配置時移功能後,直播服務將對直播流TS切片檔案進行儲存,觀眾端可發起時移播放請求進行直播內容回看。
我們先實現播放一段時移內容,再向您詳細介紹時移播放的具體功能,先看一下請求連結:
http://<DomainName>/<AppName>/<StreamName.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
可以發現,時移請求與M3U8的直播地址類似,只是多了兩個參數,aliyunols=on為固定欄位,lhs_offset_unix_s_0=300表示向前位移300秒。
通過CDN調用時移請求時必須攜帶aliyunols=on參數。
目前時移播放只能使用M3U8格式直播地址。
推薦您使用阿里雲播放器播放時移內容,關於阿里雲播放器使用可參見播放器SDK。
在該樣本中,我們實現了回退300秒觀看直播內容,在播放時移內容時通過lhs_offset_unix_s_0參數設定播放時移內容的時間,參數格式為lhs_{type}_{format}_{unit}_{zone}
。
參數中各變數取值如下:
type | format | unit | zone |
時間類型。取值:
| 時移的時間格式。取值:
| 時移的時間單位。取值:
| 時區,取值:0~9,表示東*區。其中,0表示UTC時間,8表示中國時區。 說明 當format取值為unix時,zone取值為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
(向前時移30分鐘)
lhs_start
和lhs_offset
必須指定其中一個,如果同時指定lhs_start
與lhs_offset
,時移播放將以lhs_offset
為準。lhs_end/lhs_vodend
為可選配置,如果不指定lhs_end/lhs_vodend
,時移播放會以直播模式播放至直播推流結束。如果指定了
lhs_end
,時移播放會以直播模式播放直到指定的lhs_end
時間點。如果指定了
lhs_vodend
,時移播放會以點播模式播放直到指定的lhs_vodend
時間點(點播模式會一次性返回所有ts切片,可以使用播放器進度條控制播放前進回退)。如果同時指定
lhs_end
與lhs_vodend
,時移播放將以lhs_vodend
為準。
在您的業務中,如果您無法知道具體的start和end時間點,可以通過查詢時移時間軸擷取start和end。
查詢時移時間軸範例程式碼如下:
//需要將<>替換成實際使用的值
http://<DomainName>/openapi/timeline/query?aliyunols=on&app=<AppName>&stream=<StreamName>&format=ts&lhs_start_unix_s_0=<StartTime>&lhs_end_unix_s_0=<endTime>&auth_key=<auth_key>
樣本說明如下:
名稱 | 描述 |
請求方式 | GET |
URL | 請求URL,例如: |
參數 |
|
常見錯誤處理 |
|
返回樣本如下所示:
{
"retCode": 0,
"description": "success",
"content": {
"current": 1514269063,
"timeline": [
{
"start": 1514269054,
"end": 1514269058
}
]
}
}
參數 | 描述 |
current | 當前系統時間,播放器可以基於這個欄位對時。 |
timeline | 有效時移時間段,包含開始和結束時間戳記。 |
start | 有效片段的開始時間(UNIX時間戳記),單位:秒。 |
end | 有效片段的結束時間(UNIX時間戳記),單位:秒。 |
一般情況下,一次推流會產生一個timeline對象(start接近於直播開始時間,end接近於current或直播結束時間),但由於斷流重推、網路波動等原因可能會出現多個timeline對象。
您可以在控制台查詢指定網域名稱時移資料量。更多資訊請參見用量查詢。
進階使用
時移播放轉碼流
時移功能可以結合轉碼功能使用,播放時播放轉碼流。時移播放轉碼流,需要先完成轉碼配置。配置轉碼功能可參見直播轉碼。
此處假設您已完成轉碼功能相關配置。
在配置時移功能時,將轉碼流也產生時移資料,範例程式碼如下:
//是否忽略對應轉碼流產生時移資料,true/false,預設值true
openLiveShiftRequest.setIgnoreTranscode("<false>");
然後在轉碼流地址上增加時移參數,即可以實現時移播放轉碼流。
播放地址樣本如下:
http://<DomainName>/<AppName>/<StreamName_轉碼模板ID.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
重新推流,即可對轉碼流進行時移播放。
對於拉流觸發轉碼的轉碼配置,播放轉碼流的時移是不能觸發轉碼的,需要提前播放轉碼流直播觸發轉碼(您也可以將轉碼配置為推流觸發轉碼)。
目前時移功能暫不支援多碼率轉碼流。
時移播放封裝流
時移播放封裝流是將直播時移功能與直播封裝功能結合使用。
阿里雲ApsaraVideo for Live支援直播封裝服務,支援CMAF、LL-HLS(低延遲HLS)等播放協議,可有效降低直播延遲。開啟直播封裝後,ApsaraVideo for Live流會被切成TS或CMAF切片,通過指定的HLS或LL-HLS協議向播放使用者分發,使用者請求的M3U8播放清單中包含不斷重新整理的切片地址。相對於HLS,LL-HLS可以將切片分割成更小(0.2~1秒)的Part切片,並支援M3U8和Part切片的阻塞載入,從而實現端到端低至3~5秒的延遲;相對於TS格式,CMAF封裝格式有廣泛的裝置和瀏覽器支援,且支援更新的轉碼器(codec),如H.265。
如果您對直播封裝功能暫不瞭解,請參見文檔直播封裝。
此處假設您已完成直播封裝功能配置。
實現時移播放封裝流,不需要對時移功能配置做出修改,只需要將封裝流地址增加時移參數即可。
播放地址樣本如下:
http://<DomainName>/<AppName>/<StreamName-封裝格式.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
重新推流,即可對封裝流進行時移播放。
如果需要時移播放封裝轉碼流,只需在封裝轉碼流地址上增加時移參數即可。
相關文檔
直播時移相關API,請參見直播時移。