全部產品
Search
文件中心

ApsaraVideo Live:直播時移

更新時間:Dec 04, 2024

直播時移可以回看從直播開始時間到目前時間之間的直播視頻。通過閱讀本文,您可以瞭解直播時移的實現原理及請求方式。

實現原理

ApsaraVideo for Live流會被切成TS切片,通過HLS協議向播放使用者分發,使用者請求的M3U8播放清單中包含不斷重新整理的TS切片地址。對於常規的HLS直播,TS切片地址及對應的TS檔案無法儲存,因此目前時間之前的ApsaraVideo for Live內容無法進行回溯。在開啟直播時移功能後,TS切片資訊以及檔案會進行儲存,從而實現從直播開始時間到目前時間之間的視頻回溯功能。

使用限制

直播時移最大支援直播觀看人數為10萬人,如果需要支援更多人觀看,請提交工單。關於如何提交工單,請參見聯絡我們

使用情境

直播時移功能可以讓直播觀眾在直播過程中回看直播內容。比如在進行賽事直播時,通過時移功能可以讓觀眾像觀看影視劇一樣,回看賽事內容。

目前ApsaraVideo for Live有三種功能支援對直播內容進行回看,直播錄製直播時移直播截圖(直播截圖只能按頻率對直播內容進行截圖儲存,不適用於播放情境)。

其中直播錄製功能偏向直播結束後對直播內容進行播放,直播時移偏向直播過程中觀眾端對直播內容進行回放。

說明

瞭解直播錄製與直播截圖功能,請參見直播錄製直播截圖

功能使用

說明
  • 使用直播時移功能會產生直播時移費用,按時移寫入量、時移回看規格計費。計費規則詳見直播時移費用

  • 直播時移功能服務地區請參見服務地區

使用直播時移,分兩部分內容:

  1. 進行直播時移功能配置。

    說明

    功能需要配置,才能將直播內容進行儲存從而支援時移功能。

  2. 觀眾端發起請求使用時移功能。

配置直播時移功能

ApsaraVideo for Live目前支援兩種方式進行直播時移功能配置。

控制台配置直播時移功能

  1. 登入ApsaraVideo for Live控制台
  2. 在左側導覽列選擇功能管理>直播時移,進入直播時移頁面。

  3. 選擇待配置的播流網域名稱。

  4. 單擊添加

  5. 配置直播時移。

    直播時移

    直播時移配置參數及說明如下表所示。

    參數

    描述

    AppName

    視頻的應用程式名稱,輸入的AppName必須與直播推流的AppName保持一致,方可生效。不超過255字元,支援數字、大小寫字母、虛線(-)、底線(_),虛線、底線不能位於首位。如果您想要進行網域名稱層級直播時移配置,輸入星號(*)即可。

    StreamName

    直播流名稱。

    轉碼流

    • 僅源流:僅支援源流時移。

    • 包含轉碼流:可支援源流和轉碼流時移。

    時移天數

    ApsaraVideo for Live為您提供以下時移天數。

    • 1天

    • 3天

    • 7天

    • 15天

    • 30天

    說明
    • 直播時移配置後需要重新推流才會生效,對進行中中的直播流,新設定的時移不生效。

    • 直播時移流通過直播播放網域名稱對應的URL直接存取,URL的訪問規格說明,具體請參見直播時移規則說明

    • 若主播流網域名稱已關聯子播流網域名稱,請到子網域名稱中開啟直播時移開關,否則時移配置無法對子播流網域名稱生效。

    • 直播時移按時移寫入量、時移回看規格計費。更多資訊,請參見直播時移費用

  6. 單擊確定

API配置直播時移功能

 
//需要<>內容替換成實際使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
OpenLiveShiftRequest openLiveShiftRequest = new OpenLiveShiftRequest();
openLiveShiftRequest.setDomainName("<DomainName>");
openLiveShiftRequest.setAppName("<AppName>");
openLiveShiftRequest.setStreamName("<StreamName>");
//資料保留時間長度,單位天,取值(1-30),預設值7
openLiveShiftRequest.setVision("<7>");
//是否忽略對應轉碼流產生時移資料,true/false,預設值true
openLiveShiftRequest.setIgnoreTranscode("<true>");
//
//其他業務代碼
//

try {
    OpenLiveShiftResponse openLiveShiftResponse = client.getAcsResponse(openLiveShiftRequest);
    System.out.println(new Gson().toJson(openLiveShiftResponse));
    // todo something.
} catch (ServerException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClientException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
說明
  • AppName可以設定為星號(*),表示該配置針對於網域名稱下所有直播流有效。

  • StreamName可以設定為星號(*),表示該配置針對於AppName下所有直播流有效。

  • 添加完成後,可調用DescribeLiveShiftConfigs查詢指定網域名稱的時移配置。

  • 使用JAVA SDK,具體請參見Java SDK使用說明

  • 重新推流配置才會生效。

  • 更多參數說明可參見OpenLiveShift - 開啟時移服務

使用直播時移功能

配置時移功能後,直播服務將對直播流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

時間類型。取值:

  • start:播放開始時間。

  • end:播放結束時間。

  • vodend:以點播形式指定播放結束時間。

    說明

    設定vodend表示使用點播模式回看,一次返回指定時間段內所有的ts,包含endlist標籤。

  • offset:向前位移的時間。

時移的時間格式。取值:

  • unix:UNIX時間戳記。

  • human:年月日時分秒。樣本:20170809230130。

時移的時間單位。取值:

  • s:秒。

  • ms:毫秒。

時區,取值: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_startlhs_offset必須指定其中一個,如果同時指定lhs_startlhs_offset,時移播放將以lhs_offset為準。

  • lhs_end/lhs_vodend為可選配置,如果不指定lhs_end/lhs_vodend,時移播放會以直播模式播放至直播推流結束。

  • 如果指定了lhs_end,時移播放會以直播模式播放直到指定的lhs_end時間點。

  • 如果指定了lhs_vodend,時移播放會以點播模式播放直到指定的lhs_vodend時間點(點播模式會一次性返回所有ts切片,可以使用播放器進度條控制播放前進回退)。

  • 如果同時指定lhs_endlhs_vodend,時移播放將以lhs_vodend為準。

在您的業務中,如果您無法知道具體的startend時間點,可以通過查詢時移時間軸擷取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,例如:http://{domain}/openapi/timeline/query,其中,{domain}為您的播流網域名稱。

參數

  • aliyunols(required):on。(固定欄位)

  • app(required):應用程式名稱。

  • stream(required):流名。

  • format(required):ts。(固定欄位)

    說明

    目前介面只支援查詢ts格式的時移資料。

  • lhs_start_unix_s_0(required):查詢區間開始時間的時間戳記(樣本值:1724295706)。單位:秒。

  • lhs_end_unix_s_0(required):查詢區間結束時間的時間戳記(樣本值:1724317306)。單位:秒。

  • auth_key:鑒權key,此處鑒權key與播流地址使用的鑒權key採用同一種密碼編譯演算法,如對鑒權加密暫不瞭解,請參見文檔鑒權程式碼範例

常見錯誤處理

  • 403:請檢查您auth_key值的加密過程是否正確。

返回樣本如下所示:

{
  "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,請參見直播時移