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