直播截圖
直播截圖提供實時截圖功能,滿足您在觀看直播同時的截圖需求。本文詳細為您介紹視頻直播截圖功能。
前提條件
視頻直播截圖功能需要將截圖文件存放在Bucket中,因此需要開通OSS服務(wù)并且擁有至少一個Bucket用于存儲這些截圖文件。更多詳情,請參見開通OSS服務(wù)和創(chuàng)建存儲空間。
Bucket必須與播流域名的直播中心同地域,不支持跨地域截圖。
直播截圖規(guī)則
直播截圖是針對推流的
AppName
為粒度設(shè)置的。您可以設(shè)置某個AppName
下所有推流的截圖規(guī)則。說明如果設(shè)置
AppName
為星號(*),則表示截圖規(guī)則適用于該直播域名下的所有推流。直播截圖功能配置時,可以定義覆蓋截圖和實時截圖兩種類型。
覆蓋截圖是每次新生成截圖覆蓋之前生成的截圖文件。
實時截圖是每次新生成的截圖不覆蓋之前生成的截圖文件,截圖遞增存儲。
目前直播截圖僅支持生成JPG格式。
說明兩種類型可同時設(shè)置,且必須設(shè)置其中之一。
直播截圖功能介紹
新配置的截圖模板對正在進行的直播流不生效,需要重新推流才生效。
視頻截圖功能配置
配置視頻直播截圖功能可以通過以下兩種方法:
- 登錄視頻直播控制臺。
在左側(cè)導航欄選擇功能管理>直播截圖,進入直播截圖頁面,選擇截圖配置頁簽。
選擇待配置的播流域名。
單擊添加。
配置截圖模板。
截圖模板參數(shù)及說明如下表所示。
參數(shù)
描述
AppName
視頻的應(yīng)用名稱,輸入的AppName必須與直播推流的AppName保持一致,方可生效。如果您想要進行域名級別截圖配置,輸入星號(*)即可。
截圖頻率
截圖頻率,單位:秒,取值范圍:5~3600。
存儲位置
選擇截圖文件在OSS上的存儲位置。
OSS Bucket必須與播流域名的直播中心同地域,不支持跨地域截圖。
存儲方式
存儲方式分兩種類型,支持復(fù)選。
覆蓋截圖:視頻截圖按照截圖頻率依次截圖,新截取的圖片覆蓋上一張舊圖。
實時截圖:視頻截圖按照截圖頻率依次截圖,新圖片按照N+1(N≥0)的順序依次存儲在OSS中。
說明復(fù)選時,會同時以兩種方式進行截圖。
說明配置完成后該域名下所有AppName(設(shè)置好的AppName),都會按照設(shè)置好的模板配置進行截圖并存儲。
截圖設(shè)置修改后,會在下次推流后生效。
單擊確定。
//需要將<>內(nèi)容替換成實際使用的值
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();
}
配置成功后,重新推流將會產(chǎn)生截圖文件。截圖文件將會儲存至OSS的<BucketName>中,由于同時配置了覆蓋截圖和實時截圖文件路徑,將會同時產(chǎn)生覆蓋截圖文件和實時截圖文件。覆蓋截圖文件儲存路徑為<{AppName}/{StreamName}.jpg>。實時截圖文件儲存路徑為<{AppName}/{StreamName}/{UnixTimestamp}.jpg>。
若對覆蓋截圖和實時截圖的區(qū)別還不了解,請參見文檔開頭部分直播截圖規(guī)則。
更多參數(shù)說明請參見AddLiveAppSnapshotConfig。
截圖文件管理
查看截圖文件
您可以通過三種方式查看截圖文件。
- 登錄視頻直播控制臺。
在左側(cè)導航欄選擇功能管理>直播截圖,進入直播截圖頁面,選擇截圖管理。
選擇待查詢的域名及時間,然后輸入或選擇AppName和StreamName。
單擊查詢,查看選擇時間段內(nèi)的截圖。若截圖無法查看,請確定OSS Bucket讀寫權(quán)限是否為公共讀,具體操作,請參見配置OSS bucket讀寫權(quán)限。
將鼠標移動到某一圖片上方,可以查看大圖或復(fù)制截圖的流地址。
//需要將<>內(nèi)容替換成實際使用的值
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));
目前只支持查詢一年內(nèi)其中某一天(EndTime和StartTime之間的間隔不能超過1天)的截圖文件。
截圖類型配置為覆蓋截圖+實時截圖的情況下,只能查詢出實時截圖的文件內(nèi)容。若在此情況下要查看覆蓋截圖的截圖文件,請在OSS中查看,詳情可參見OSS列舉文件。
接口暫不支持分頁,且一次最多返回100條數(shù)據(jù)(默認返回10條數(shù)據(jù))。
更多查詢截圖文件內(nèi)容接口說明,請參見DescribeLiveStreamSnapshotInfo。
在配置截圖功能時,您已指定了截圖文件在OSS中的存儲地址。如果需要在OSS中查看截圖文件,可參見OSS列舉文件。
刪除截圖文件
視頻直播儲存的是截圖文件信息,如AppName,StreamName,OSS文件儲存路徑等,文件是儲存在OSS中。如果在刪除截圖時需要同步刪除儲存在OSS中的文件,則需要創(chuàng)建服務(wù)角色AliyunMTSVideoLifecycleRole,并精確授權(quán)AliyunMTSVideoLifecycleRolePolicy系統(tǒng)策略。
在直播控制臺刪除截圖或錄制文件時需要先進行授權(quán),您需要按照如下步驟在RAM控制臺創(chuàng)建并授權(quán)RAM角色后,再登錄直播控制臺刪除截圖或錄制文件。
使用阿里云賬號登錄RAM控制臺。
在左側(cè)導航欄,選擇 。
在角色頁面,單擊創(chuàng)建角色。
在選擇類型頁簽,可信實體類型選擇阿里云服務(wù),單擊下一步。
在配置角色頁簽,請按照以下參數(shù)配置:
角色類型:普通服務(wù)角色
角色名稱:AliyunMTSVideoLifecycleRole
備注:該參數(shù)為可選,您可以按照需求自定義填寫。
選擇受信服務(wù):多媒體轉(zhuǎn)碼服務(wù)
配置完成后,單擊完成。
在創(chuàng)建完成頁簽,提示角色創(chuàng)建成功后,單擊精確授權(quán)。
在添加權(quán)限頁簽,請按照以下參數(shù)配置:
選擇權(quán)限類型:系統(tǒng)策略
輸入策略名稱:AliyunMTSVideoLifecycleRolePolicy
配置完成后,單擊確定。
您可以通過三種方式刪除截圖文件:
- 登錄視頻直播控制臺。
在左側(cè)導航欄選擇功能管理>直播截圖,進入直播截圖頁面,選擇截圖管理。
選擇待查詢的域名及時間,然后輸入或選擇AppName和StreamName。
將鼠標移動到某一圖片上方,單擊刪除按鈕可進行單張刪除。
勾選多張截圖后單擊批量刪除,可批量刪除截圖。最多可支持批量刪除200張截圖。
//需要將<>內(nèi)容替換成實際使用的值
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));
目前只支持刪除一年內(nèi)的截圖文件。
截圖文件時間戳可通過查詢截圖文件獲取。詳情可參見查看截圖文件。
對于覆蓋截圖的截圖文件,目前只能在OSS中進行刪除,具體操作可參見OSS刪除文件。
更多刪除直播截圖文件接口說明,請參見DeleteSnapshotFiles。
以上示例實現(xiàn)了對截圖文件的刪除(同時刪除了儲存在OSS中的文件)。
您可以為截圖功能設(shè)置回調(diào)事件,獲取回調(diào)參數(shù)將截圖信息保存至您自己的業(yè)務(wù)系統(tǒng)(同時儲存時間戳),在需要刪除文件時,您就可以根據(jù)您系統(tǒng)的策略(如通過定時任務(wù)每天定時刪除N個月以前的截圖文件)查詢出截圖文件時間戳對截圖文件進行刪除。若想了解截圖回調(diào),可參見直播截圖回調(diào)開發(fā)指南。
一般情況下,不建議您直接刪除存儲在OSS中的截圖文件。如果需要刪除存儲在OSS中的截圖文件,可以通過視頻直播刪除截圖文件時同步刪除存儲在OSS中的文件。如果您因為業(yè)務(wù)需求需要直接刪除存儲在OSS中的截圖文件,可參考文檔OSS刪除文件。
相關(guān)文檔
使用Java SDK,請參見Java SDK使用說明。
更多直播截圖API,可參見直播截圖相關(guān)API。