直播截圖提供即時截圖功能,滿足您在觀看直播同時的截圖需求。本文詳細為您介紹ApsaraVideo for Live截圖功能。
前提條件
ApsaraVideo for Live截圖功能需要將截圖檔案存放在Bucket中,因此需要開通OSS服務並且擁有至少一個Bucket用於儲存這些截圖檔案。更多詳情,請參見開通OSS服務和建立儲存空間。
Bucket必須與播流網域名稱的直播中心同地區,不支援跨地區截圖。
直播截圖規則
直播截圖是針對推流的
AppName
為粒度設定的。您可以設定某個AppName
下所有推流的截圖規則。說明如果設定
AppName
為星號(*),則表示截圖規則適用於該直播網域名稱下的所有推流。直播截圖功能配置時,可以定義覆蓋截圖和即時截圖兩種類型。
覆蓋截圖是每次新產生截圖覆蓋之前產生的截圖檔案。
即時截圖是每次新產生的截圖不覆蓋之前產生的截圖檔案,截圖遞增儲存。
目前直播截圖僅支援產生JPG格式。
說明兩種類型可同時設定,且必須設定其中之一。
直播截圖功能介紹
新配置的截圖模板對進行中的直播流不生效,需要重新推流才生效。
視頻截圖功能配置
配置ApsaraVideo for Live截圖功能可以通過以下兩種方法:
控制台配置截圖功能
- 登入ApsaraVideo for Live控制台。
在左側導覽列選擇功能管理>直播截圖,進入直播截圖頁面,選擇截圖配置頁簽。
選擇待配置的播流網域名稱。
單擊添加。
配置截圖模板。
截圖模板參數及說明如下表所示。
參數
描述
AppName
視頻的應用程式名稱,輸入的AppName必須與直播推流的AppName保持一致,方可生效。如果您想要進行網域名稱層級截圖配置,輸入星號(*)即可。
截圖頻率
截圖頻率,單位:秒,取值範圍:5~3600。
儲存位置
選擇截圖檔案在OSS上的儲存位置。
OSS Bucket必須與播流網域名稱的直播中心同地區,不支援跨地區截圖。
儲存方式
儲存方式分兩種類型,支援複選。
覆蓋截圖:視頻截圖按照截圖頻率依次截圖,新截取的圖片覆蓋上一張舊圖。
即時截圖:視頻截圖按照截圖頻率依次截圖,新圖片按照N+1(N≥0)的順序依次儲存在OSS中。
說明複選時,會同時以兩種方式進行截圖。
說明配置完成後該網域名稱下所有AppName(設定好的AppName),都會按照設定好的模板配置進行截圖並儲存。
截圖設定修改後,會在下次推流後生效。
單擊確定。
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。
截圖檔案管理
查看截圖檔案
您可以通過三種方式查看截圖檔案。
控制台查看截圖檔案
- 登入ApsaraVideo for Live控制台。
在左側導覽列選擇功能管理>直播截圖,進入直播截圖頁面,選擇截圖管理。
選擇待查詢的網域名稱及時間,然後輸入或選擇AppName和StreamName。
單擊查詢,查看選擇時間段內的截圖。若截圖無法查看,請確定OSS Bucket讀寫權限是否為公用讀取,具體操作,請參見配置OSS bucket讀寫權限。
將滑鼠移動到某一圖片上方,可以查看大圖或複製截圖的流地址。
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角色後,再登入直播控制台刪除截圖或錄製檔案。
使用阿里雲帳號登入RAM控制台。
在左側導覽列,選擇身份管理 > 角色。
在角色頁面,單擊建立角色。
在選擇類型頁簽,可信實體類型選擇阿里雲服務,單擊下一步。
在配置角色頁簽,請按照以下參數配置:
角色類型:普通服務角色
角色名稱:AliyunMTSVideoLifecycleRole
備忘:該參數為可選,您可以按照需求自訂填寫。
選擇受信服務:多媒體轉碼服務
配置完成後,單擊完成。
在建立完成頁簽,提示角色建立成功後,單擊精確授權。
在添加許可權頁簽,請按照以下參數配置:
選擇權限類別型:系統策略
輸入策略名稱稱:AliyunMTSVideoLifecycleRolePolicy
配置完成後,單擊確定。
您可以通過三種方式刪除截圖檔案:
控制台刪除截圖檔案
- 登入ApsaraVideo for Live控制台。
在左側導覽列選擇功能管理>直播截圖,進入直播截圖頁面,選擇截圖管理。
選擇待查詢的網域名稱及時間,然後輸入或選擇AppName和StreamName。
將滑鼠移動到某一圖片上方,單擊刪除按鈕可進行單張刪除。
勾選多張截圖後單擊大量刪除,可大量刪除截圖。最多可支援大量刪除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。