天天看點

OSS 解決方案篇-OSS 結合 視訊直播使用

功能描述

  • 視訊直播是将推流端的資料流實時的通過播流位址進行播放,是以後續如果需要再對播放曆史直播資料就必須要使用視訊直播的錄制功能。視訊直播的錄制功能就是将視訊中心接收到的推流端推流的資料進行錄制,并将其儲存成 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 檔案清單示意圖。

OSS 解決方案篇-OSS 結合 視訊直播使用

截圖功能

截圖功能配置

配置視訊直播的截圖功能可以通過兩種方法:

  • 通過控制台建立。參見 配置截圖。
  • 通過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的對應目錄檢視生成結果,請參考下圖。

OSS 解決方案篇-OSS 結合 視訊直播使用

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參數必須二者選一進行配置,暫時沒有預設值設定。