全部產品
Search
文件中心

ApsaraVideo Live:直播截圖

更新時間:Nov 05, 2024

直播截圖提供即時截圖功能,滿足您在觀看直播同時的截圖需求。本文詳細為您介紹ApsaraVideo for Live截圖功能。

前提條件

ApsaraVideo for Live截圖功能需要將截圖檔案存放在Bucket中,因此需要開通OSS服務並且擁有至少一個Bucket用於儲存這些截圖檔案。更多詳情,請參見開通OSS服務建立儲存空間

重要

Bucket必須與播流網域名稱的直播中心同地區,不支援跨地區截圖。

直播截圖規則

  • 直播截圖是針對推流的AppName為粒度設定的。您可以設定某個AppName下所有推流的截圖規則。

    說明

    如果設定AppName為星號(*),則表示截圖規則適用於該直播網域名稱下的所有推流。

  • 直播截圖功能配置時,可以定義覆蓋截圖和即時截圖兩種類型。

    • 覆蓋截圖是每次新產生截圖覆蓋之前產生的截圖檔案。

    • 即時截圖是每次新產生的截圖不覆蓋之前產生的截圖檔案,截圖遞增儲存。

    • 目前直播截圖僅支援產生JPG格式。

      說明

      兩種類型可同時設定,且必須設定其中之一。

直播截圖功能介紹

說明

新配置的截圖模板對進行中的直播流不生效,需要重新推流才生效。

視頻截圖功能配置

配置ApsaraVideo for Live截圖功能可以通過以下兩種方法:

控制台配置截圖功能

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

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

  4. 單擊添加

  5. 配置截圖模板。

    image

    截圖模板參數及說明如下表所示。

    參數

    描述

    AppName

    視頻的應用程式名稱,輸入的AppName必須與直播推流的AppName保持一致,方可生效。如果您想要進行網域名稱層級截圖配置,輸入星號(*)即可。

    截圖頻率

    截圖頻率,單位:秒,取值範圍:5~3600。

    儲存位置

    選擇截圖檔案在OSS上的儲存位置。

    OSS Bucket必須與播流網域名稱的直播中心同地區,不支援跨地區截圖。

    儲存方式

    儲存方式分兩種類型,支援複選。

    • 覆蓋截圖:視頻截圖按照截圖頻率依次截圖,新截取的圖片覆蓋上一張舊圖。

    • 即時截圖:視頻截圖按照截圖頻率依次截圖,新圖片按照N+1(N≥0)的順序依次儲存在OSS中。

    說明

    複選時,會同時以兩種方式進行截圖。

    說明

    配置完成後該網域名稱下所有AppName(設定好的AppName),都會按照設定好的模板配置進行截圖並儲存。

    截圖設定修改後,會在下次推流後生效。

  6. 單擊確定

API配置截圖功能

//需要將<>內容替換成實際使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppSnapshotConfigRequest addLiveAppSnapshotConfigRequest = new AddLiveAppSnapshotConfigRequest();
addLiveAppSnapshotConfigRequest.setDomainName("<DomainName>");
addLiveAppSnapshotConfigRequest.setAppName("<AppName>");
//截圖周期,取值(5-3600)
addLiveAppSnapshotConfigRequest.setTimeInterval(5);
addLiveAppSnapshotConfigRequest.setOssEndpoint("<Endpoint>");
addLiveAppSnapshotConfigRequest.setOssBucket("<BucketName>");
//定義覆蓋截圖隱藏檔名(小於256 Byte,支援變數匹配,包含{AppName}、{StreamName})
addLiveAppSnapshotConfigRequest.setOverwriteOssObject("<{AppName}/{StreamName}.jpg>");
//定義即時截圖隱藏檔名(小於256 Byte,支援變數匹配,包含{AppName}、{StreamName}、{UnixTimestamp}、{Sequence},其中 {UnixTimestamp}、{Sequence} 必填一個)
addLiveAppSnapshotConfigRequest.setSequenceOssObject("<{AppName}/{StreamName}/{UnixTimestamp}.jpg>");
try {
    AddLiveAppSnapshotConfigResponse addLiveAppSnapshotConfigResponse = client.getAcsResponse(addLiveAppSnapshotConfigRequest);
    System.out.println(addLiveAppSnapshotConfigResponse.getRequestId());
    // todo something.
} catch (ServerException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClientException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}          
說明
  • 配置成功後,重新推流將會產生截圖檔案。截圖檔案將會儲存至OSS的<BucketName>中,由於同時配置了覆蓋截圖即時截圖檔案路徑,將會同時產生覆蓋截圖檔案和即時截圖檔案。覆蓋截圖檔案儲存路徑為<{AppName}/{StreamName}.jpg>。即時截圖檔案儲存路徑為<{AppName}/{StreamName}/{UnixTimestamp}.jpg>。

  • 若對覆蓋截圖和即時截圖的區別還不瞭解,請參見文檔開頭部分直播截圖規則

  • 更多參數說明請參見AddLiveAppSnapshotConfig

截圖檔案管理

查看截圖檔案

您可以通過三種方式查看截圖檔案。

控制台查看截圖檔案

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

  3. 選擇待查詢的網域名稱及時間,然後輸入或選擇AppName和StreamName。

  4. 單擊查詢,查看選擇時間段內的截圖。若截圖無法查看,請確定OSS Bucket讀寫權限是否為公用讀取,具體操作,請參見配置OSS bucket讀寫權限

    image

  5. 將滑鼠移動到某一圖片上方,可以查看大圖或複製截圖的流地址。

API查看截圖檔案

//需要將<>內容替換成實際使用的值 
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
DescribeLiveStreamSnapshotInfoRequest describeLiveStreamSnapshotInfoRequest=new DescribeLiveStreamSnapshotInfoRequest();
describeLiveStreamSnapshotInfoRequest.setAppName("<AppName>");
describeLiveStreamSnapshotInfoRequest.setStreamName("<StreamName>");
describeLiveStreamSnapshotInfoRequest.setDomainName("<DomainName>");
//UTC時間,格式為:yyyy-MM-ddTHH:mm:ssZ
describeLiveStreamSnapshotInfoRequest.setStartTime("<StartTime>");
//UTC時間,格式為:yyyy-MM-ddTHH:mm:ssZ,EndTime和StartTime之間的間隔不能超過1天。
describeLiveStreamSnapshotInfoRequest.setEndTime("<EndTime>");
DescribeLiveStreamSnapshotInfoResponse describeLiveStreamSnapshotInfoResponse = null;
try {
    describeLiveStreamSnapshotInfoResponse = client.getAcsResponse(describeLiveStreamSnapshotInfoRequest);
} catch (ClientException e) {
    e.printStackTrace();
}
System.out.println(new Gson().toJson(describeLiveStreamSnapshotInfoResponse));
重要
  • 目前只支援查詢一年內其中某一天(EndTime和StartTime之間的間隔不能超過1天)的截圖檔案。

  • 截圖類型配置為覆蓋截圖+即時截圖的情況下,只能查詢出即時截圖的檔案內容。若在此情況下要查看覆蓋截圖的截圖檔案,請在OSS中查看,詳情可參見OSS列舉檔案

  • 介面暫不支援分頁,且一次最多返回100條資料(預設返回10條資料)。

  • 更多查詢截圖檔案內容介面說明,請參見DescribeLiveStreamSnapshotInfo

OSS查看截圖檔案

在配置截圖功能時,您已指定了截圖檔案在OSS中的儲存地址。如果需要在OSS中查看截圖檔案,可參見OSS列舉檔案

刪除截圖檔案

ApsaraVideo for Live儲存的是截圖檔案資訊,如AppName,StreamName,OSS檔案儲存路徑等,檔案是儲存在OSS中。如果在刪除截圖時需要同步刪除儲存在OSS中的檔案,則需要建立服務角色AliyunMTSVideoLifecycleRole,並精確授權AliyunMTSVideoLifecycleRolePolicy系統策略。

詳細授權過程

在直播控制台刪除截圖或錄製檔案時需要先進行授權,您需要按照如下步驟在RAM控制台建立並授權RAM角色後,再登入直播控制台刪除截圖或錄製檔案。

  1. 使用阿里雲帳號登入RAM控制台

  2. 在左側導覽列,選擇身份管理 > 角色

  3. 角色頁面,單擊建立角色

  4. 選擇類型頁簽,可信實體類型選擇阿里雲服務,單擊下一步image

  5. 配置角色頁簽,請按照以下參數配置:

    • 角色類型:普通服務角色

    • 角色名稱:AliyunMTSVideoLifecycleRole

    • 備忘:該參數為可選,您可以按照需求自訂填寫。

    • 選擇受信服務:多媒體轉碼服務

    配置完成後,單擊完成image

  6. 建立完成頁簽,提示角色建立成功後,單擊精確授權

  7. 添加許可權頁簽,請按照以下參數配置:

    • 選擇權限類別型:系統策略

    • 輸入策略名稱稱:AliyunMTSVideoLifecycleRolePolicy

    配置完成後,單擊確定image

您可以通過三種方式刪除截圖檔案:

控制台刪除截圖檔案

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

  3. 選擇待查詢的網域名稱及時間,然後輸入或選擇AppName和StreamName。

  4. 將滑鼠移動到某一圖片上方,單擊刪除按鈕可進行單張刪除。

    勾選多張截圖後單擊大量刪除,可大量刪除截圖。最多可支援大量刪除200張截圖。

API刪除截圖檔案

//需要將<>內容替換成實際使用的值 
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);        
DeleteSnapshotFilesRequest deleteSnapshotFilesRequest=new DeleteSnapshotFilesRequest();
deleteSnapshotFilesRequest.setAppName("<AppName>");
deleteSnapshotFilesRequest.setStreamName("<StreamName>");
deleteSnapshotFilesRequest.setDomainName("<DomainName>");
//是否同步刪除OSS中的檔案
deleteSnapshotFilesRequest.setRemoveFile(true);
List<Long> createTimestampLists=new ArrayList<>();
//添加需要刪除的截圖檔案時間戳記
//createTimestampLists.add(<截圖檔案時間戳記>);
deleteSnapshotFilesRequest.setCreateTimestampLists(createTimestampLists);
DeleteSnapshotFilesResponse deleteSnapshotFilesResponse= null;
try {
    deleteSnapshotFilesResponse = client.getAcsResponse(deleteSnapshotFilesRequest);
} catch (ClientException e) {
    e.printStackTrace();
}
System.out.println(new Gson().toJson(deleteSnapshotFilesResponse));
重要
  • 目前只支援刪除一年內的截圖檔案。

  • 截圖檔案時間戳記可通過查詢截圖檔案擷取。詳情可參見查看截圖檔案

  • 對於覆蓋截圖的截圖檔案,目前只能在OSS中進行刪除,具體操作可參見OSS刪除檔案

  • 更多刪除直播截圖檔案介面說明,請參見DeleteSnapshotFiles

以上樣本實現了對截圖檔案的刪除(同時刪除了儲存在OSS中的檔案)。

您可以為截圖功能設定回調事件,擷取回調參數將截圖資訊儲存至您自己的業務系統(同時儲存時間戳記),在需要刪除檔案時,您就可以根據您系統的策略(如通過定時任務每天定時刪除N個月以前的截圖檔案)查詢出截圖檔案時間戳記對截圖檔案進行刪除。若想瞭解截圖回調,可參見直播截圖回調開發指南。

OSS刪除截圖檔案

一般情況下,不建議您直接刪除儲存在OSS中的截圖檔案。如果需要刪除儲存在OSS中的截圖檔案,可以通過ApsaraVideo for Live刪除截圖檔案時同步刪除儲存在OSS中的檔案。如果您因為業務需求需要直接刪除儲存在OSS中的截圖檔案,可參考文檔OSS刪除檔案

相關文檔

使用Java SDK,請參見Java SDK使用說明

更多直播截圖API,可參見直播截圖相關API