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参数必须二者选一进行配置,暂时没有默认值设置。

上一篇:使用postman的一些小动作


下一篇:阿里开源新一代 AI 算法模型,由达摩院90后科学家研发 | 开发者必读(015期)