功能描述
- 視頻直播是將推流端的數據流實時的通過播流地址進行播放,因此後續如果需要再對播放歷史直播數據就必須要使用視頻直播的錄製功能。視頻直播的錄製功能就是將視頻中心接收到的推流端推流的數據進行錄製,並將其保存成 hls 協議的封裝格式存儲到 OSS 中。
- 用戶常需要對視頻直播的內容進行分析。例如,需要對直播中的某一幀的內容作為封面圖片或者對於直播內容進行鑑黃以查看內容合法性等需求。因此,視頻直播提供了實時截圖功能滿足用戶的截圖需求。
- 視頻直播的錄製功能可以將直播數據錄製成 HLS 協議文件,詳情參考 直播錄製功能介紹。視頻直播錄製在直播過程中會生成 TS 文件,但是僅在推流結束 180 秒後才會生成 m3u8 索引文件,無法在直播過程中生成,並且該索引文件時間為推流開始到結束,用戶無法根據業務需要自定義索引範圍。因此,視頻直播提供錄製索引管理功能供用戶對錄製索引 m3u8 文件的管理功能。
錄製功能介紹
配置視頻直播的錄製功
- 通過控制檯創建:控制檯配置方法請參考 錄製存儲至OSS、錄製存儲至VOD。
- 通過 API/SDK 創建:API/SDK 提供了創建、刪除以及查詢的功能,創建錄製配置請參考 添加 APP 錄製配置,刪除錄製配置請參考 刪除 APP 錄製配置,查看錄製配置可以分別查詢整個直播域名和單個 AppName 的錄製配置,請參考 查詢域名錄制配置 和 查詢 APP 錄製配置。下面提供使用 Java SDK 添加 APP 錄製配置的示例代碼。
錄製代碼如下
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou","<AccessKeyId>", "<AccessKeyScret>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppRecordConfigRequest addLiveAppRecordConfigRequest = new AddLiveAppRecordConfigRequest();
addLiveAppRecordConfigRequest.setDomainName("<DomainName>");
addLiveAppRecordConfigRequest.setAppName("<AppName>");
addLiveAppRecordConfigRequest.setOssEndpoint("<Endpoint>");
addLiveAppRecordConfigRequest.setOssBucket("<BucketName>");
addLiveAppRecordConfigRequest.setOssObjectPrefix("<ObjectPrefix>");
try {
AddLiveAppRecordConfigResponse addLiveAppRecordConfigResponse = client.getAcsResponse(addLiveAppRecordConfigRequest);
System.out.println(addLiveAppRecordConfigResponse.getRequestId());
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
查看錄製文件
錄製配置後新發起的推流在滿足 AppName 錄製配置時即會自動錄製推流的數據。推流過程中即會生成對應的 TS 文件到配置目錄中。而對應的索引 m3u8 文件需要在推流 180 秒結束後生成(180 秒為兼容直播推流過程由於網絡抖動等問題導致的推流短時間中斷)。其默認命名規則為{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}.m3u8,其中,AppName為直播流所屬應用名稱,StreamName為流名稱,EscapedStartTime為錄製開始時間,EscapedEndTime為錄製結束時間,下圖即是一組錄製後的 ts 和 m3u8 文件列表示意圖。
截圖功能
用戶常需要對視頻直播的內容進行分析。例如,需要對直播中的某一幀的內容作為封面圖片或者對於直播內容進行鑑黃以查看內容合法性等需求。因此,視頻直播提供了實時截圖功能滿足用戶的截圖需求。
截圖功能配置
配置視頻直播的截圖功能可以通過兩種方法:
- 通過控制檯創建。參見 配置截圖。
- 通過API/SDK:API/SDK提供了添加、刪除、查詢和更新截圖配置的接口。詳情參見 添加截圖配置、刪除截圖配置、查詢截圖配置、更新截圖配置、查詢截圖信息。下面提供使用Java SDK添加截圖配置的示例代碼。
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou","<AccessKeyId>", "<AccessKeySecret>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppSnapshotConfigRequest addLiveAppSnapshotConfigRequest = new AddLiveAppSnapshotConfigRequest();
addLiveAppSnapshotConfigRequest.setDomainName("<DomainName>");
addLiveAppSnapshotConfigRequest.setAppName("<AppName>");
addLiveAppSnapshotConfigRequest.setTimeInterval(5);
addLiveAppSnapshotConfigRequest.setOssEndpoint("<Endpoint>");
addLiveAppSnapshotConfigRequest.setOssBucket("<BucketName>");
addLiveAppSnapshotConfigRequest.setOverwriteOssObject("{AppName}/{StreamName}.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控制檯提供截圖管理功能。參見 刪除截圖。
API/SDK提供了查詢截圖信息的接口。參見 查詢截圖信息。
在知曉截圖錄制地址時可以直接在該媒體Bucket的對應目錄查看生成結果,請參考下圖。
FQA
錄製常見問題
1、直播錄製是針對於推流的 AppName 為粒度設置的,用戶可以設置某個 AppName 下的所有 StreamName 的錄製規則。並且 AppName 支持 “*” 通配符,表示該錄製規則是針對於該直播域名下的所有推流均生效的,錄製生效需要注意推流的 AppName 需要與配置的 AppName 匹配。
2、使用直播錄製功能是需要開通視頻點播服務的,並且錄製生成的 m3u8 和 TS 文件都將存放在視頻點播的輸入媒體 Bucket 中,詳情參考 媒體 Bucket 的增刪改操作。
3、錄製設置中可以設置變量,默認的錄製TS文件存放地址為:record/{Date}/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence},其中的變量均是使用 “{}” 引起的,用戶可以自行修改或者變更為常量。各變量的意義請參考控制檯配置錄製。
4、錄製設置僅會對配置完成後的新發起的推流記錄生效,當前的推流需中斷 180 秒後重新推流方可生效。
5、錄製配置中 ObjectName 是包括了前綴的文件名稱,OSS 中的目錄是邏輯概念,目錄是 Object 的 key 值的前綴。詳情參考 OSS目錄/文件夾概念。
6、錄製自動生成的索引 m3u8 文件僅有在斷流 180 秒後才可以正常生成,如果用戶需要在沒有斷流時生成索引文件提供播流訪問,請參考 直播錄製索引創建。
7、同樣的AppName 和 StreamName不能同時存儲至VOD和OSS,只能二者選其一,不能重複添加、衝突。
截圖常見問題
1、直播截圖是針對於推流的AppName為粒度設置的,用戶可以設置某個AppName下的所有StreamName的截圖規則。並且AppName支持“*”通配符,表示該截圖規則是針對於該直播域名下的所有推流均生效的,截圖生效需要注意推流的AppName需要與配置的AppName匹配。
2、與直播錄製功能類似,截圖功能也需要將截圖結果存放在媒體Bucket中。因此,截圖功能也需要開通OSS服務,並且在媒體Bucket中設置輸入媒體Bucket。詳情參見 媒體Bucket的增刪改操作。
3、配置截圖功能時,ObjectName可以定義為覆蓋和非覆蓋兩種類型,其中覆蓋是按照截圖頻率每次新生成的截圖將覆蓋之前生成的截圖文件,因此僅會得到一張截圖文件;而不覆蓋則是每次新產生的截圖將不覆蓋之前生成的截圖文件,各截圖文件使用{Sequence}區分,{Sequence}將通過1,2,……,n的方式表示。
4、使用API/SDK配置截圖配置是需要輸入OSS的Endpoint,OSS的Endpoint為不包括Bucket名稱的OSS訪問地址,詳情參見 OSS Endpoint設置,並且這裡請不要加http://或者https://協議頭。
5、使用API/SDK配置截圖時OverwriteOssObject參數和SequenceOssObject參數必須二者選一進行配置,暫時沒有默認值設置。