文档

直播流管理

视频直播提供丰富的流管理功能,包括禁推、禁播、中断直播流和恢复直播流,以及查看在线流、历史流、禁推流及其详细信息。本文介绍直播流管理的功能及方法。

禁推直播流

视频直播提供了丰富的直播流管理功能,其中禁推直播流功能可帮助您在遇到下列情况的时候,对某路直播推流进行禁止推流的操作。

  • 鉴权推流地址暴露。

  • 用户恶意推流。

  • 业务需求。

重要

禁推直播流会让直播流加入黑名单(一段时间内将不能再进行推流),若只是想对指定直播流进行中断操作,请参见中断直播流

使用方法

  • 控制台:视频直播支持在控制台查看禁推流、设置禁推流和恢复禁推流。设置禁推流,请参见在线流管理。查看或恢复禁推流,请参见禁推流管理

  • API

    接口

    描述

    参考文档

    ForbidLiveStream

    禁止某路流的推送。

    可以配置是否只断流不加入黑名单,预设某个时刻将流恢复。

    说明

    禁止直播流的上限为10,000路,超出限制将禁用失败。调用频率限制为20次/秒。

    禁止直播流

    ResumeLiveStream

    恢复某路流的推送。

    说明

    调用频率限制为30次/秒。

    恢复直播流

    java sdk设置禁推流的示例代码如下:

            //需要<>内容替换成实际使用的值
            DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
            IAcsClient client = new DefaultAcsClient(profile);
            ForbidLiveStreamRequest forbidLiveStreamRequest=new ForbidLiveStreamRequest();
            forbidLiveStreamRequest.setDomainName("<DomainName>");
            forbidLiveStreamRequest.setAppName("<AppName>");
            forbidLiveStreamRequest.setStreamName("<StreamName>");
            forbidLiveStreamRequest.setLiveStreamType("publisher");
            try {
                ForbidLiveStreamResponse forbidLiveStreamResponse = client.getAcsResponse(forbidLiveStreamRequest);
                System.out.println(new Gson().toJson(forbidLiveStreamResponse));
                // todo something.
            } catch (ServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    说明
    • 以上示例代码表示对域名<DomainName>,<AppName>下<StreamName>的主播推流(LiveStreamType=publisher)进行禁推设置,默认禁止时间为6个月。

    • LiveStreamType目前仅支持publisher。

    • 使用JAVA SDK,具体请参见Java SDK使用说明

禁播直播流

视频直播还支持对播流域名的指定播放协议进行禁播。列如根据业务需要禁止RTMP协议的播流,则可通过此功能实现。

重要

开启协议禁播后只影响本域名,关联的主子域名需各自独立配置。

使用方法

  • 控制台

    视频直播支持在控制台对播流域名的指定播放协议进行禁播,具体操作,请参见协议禁播

  • API

    接口

    描述

    参考文档

    BatchSetLiveDomainConfigs

    批量配置域名。

    可以通过Functions参数的alilive记录进行配置。

    批量配置域名

    java sdk设置协议禁播的示例代码如下:

            //需要<>内容替换成实际使用的值
            DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
            IAcsClient client = new DefaultAcsClient(profile);
            BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest =new BatchSetLiveDomainConfigsRequest();
            batchSetLiveDomainConfigsRequest.setDomainNames("<DomainNames>");
            batchSetLiveDomainConfigsRequest.setFunctions("[{\"functionArgs\":[{\"argName\":\"live_forbid_rtmp\",\"argValue\":\"on\"}],\"functionName\":\"alilive\"}]");
            try {
                BatchSetLiveDomainConfigsResponse response = client.getAcsResponse(batchSetLiveDomainConfigsRequest);
                System.out.println(new Gson().toJson(response));
                //todo something
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
    说明
    • 以上示例代码表示对域名<DomainNames>配置禁止RTMP协议的播流。

    • 使用JAVA SDK,具体请参见Java SDK使用说明

中断直播流

视频直播支持中断指定直播流的推流。

重要

中断直播流只是针对于直播流进行一次中断操作,之后还可以继续推流。若要对直播流设置禁止推送,请参见禁推直播流

  • 正在进行上行推流的直播流。

    说明

    被断流后若要恢复直播流,只需要推流端重新推流即可恢复直播流。

  • 通过拉流功能拉取的第三方直播流。

    说明

    被断流后若要恢复直播流,无需重新拉取,因为回源拉流功能具备自动重试能力,断流后会自动重新拉取直播流。

使用场景:在回源拉流的场景中,客户的流需要长时间拉取。有时候因长时间拉取会出现视频音画不同步等情况,此时需要断流,回源重新拉流保证音视频的同步。

使用方法

  • 控制台:视频直播支持在控制台进行中断直播流。具体操作,请参见在线流管理

  • API

    接口

    描述

    参考文档

    ForbidLiveStream

    禁止某路流的推送。

    oneshot参数配置为yes,可以配置为只断流不加入黑名单。

    禁止直播流

    java sdk进行断流操作的示例代码如下:

            //需要<>内容替换成实际使用的值
            DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
            IAcsClient client = new DefaultAcsClient(profile);
            ForbidLiveStreamRequest forbidLiveStreamRequest=new ForbidLiveStreamRequest();
            forbidLiveStreamRequest.setDomainName("<DomainName>");
            forbidLiveStreamRequest.setAppName("<AppName>");
            forbidLiveStreamRequest.setStreamName("<StreamName>");
            forbidLiveStreamRequest.setLiveStreamType("publisher");
            forbidLiveStreamRequest.setOneshot("yes");
            try {
                ForbidLiveStreamResponse forbidLiveStreamResponse = client.getAcsResponse(forbidLiveStreamRequest);
                System.out.println(new Gson().toJson(forbidLiveStreamResponse));
                // todo something.
            } catch (ServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    说明
    • 以上示例代码表示对域名<DomainName>,<AppName>下<StreamName>的主播推流(LiveStreamType=publisher)进行中断。

    • LiveStreamType目前仅支持publisher。

    • 使用JAVA SDK,具体请参见Java SDK使用说明

查看直播流

  • 控制台

    视频直播将直播流分为在线流、历史流和禁推流三类,您可以控制台进行查看,详情请参见流管理

    支持查看直播流的AppName、StreamName、推流时间、推流类型、转码模板、流监控、直播地址。

  • API

    接口

    描述

    参考文档

    DescribeLiveStreamsOnlineList

    获取指定域名或者指定域名下指定应用的所有在线流信息。

    查询域名在线流列表

    DescribeLiveStreamsPublishList

    获取指定时间段内指定域名(或域名下指定应用或指定流)的历史推流记录。

    查询域名历史流列表

    DescribeLiveStreamsBlockList

    获取指定域名下被禁推的直播流信息。

    查询直播流播放黑名单

    DescribeLiveStreamsControlHistory

    获取指定域名或应用下的直播流操作历史。

    查询直播流操作历史

    DescribeLiveDomainOnlineUserNum

    获取指定域名下所有流的在线人数信息。

    查询域名在线人数

    java sdk查询域名在线流列表的示例代码如下:

            //需要<>内容替换成实际使用的值
            DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
            IAcsClient client = new DefaultAcsClient(profile);
            DescribeLiveStreamsOnlineListRequest describeLiveStreamsOnlineListRequest=new DescribeLiveStreamsOnlineListRequest();
            describeLiveStreamsOnlineListRequest.setDomainName("<DomainName>");
            describeLiveStreamsOnlineListRequest.setPageNum(<1>);
            describeLiveStreamsOnlineListRequest.setPageSize(<100>);
            describeLiveStreamsOnlineListRequest.setAppName("<AppName>");
            describeLiveStreamsOnlineListRequest.setStreamName("<StreamName>");
            //查询类型  fuzzy(模糊匹配)/strict(精准匹配)。默认值:fuzzy
            describeLiveStreamsOnlineListRequest.setQueryType("fuzzy");
            try {
                DescribeLiveStreamsOnlineListResponse describeLiveStreamsOnlineListResponse = client.getAcsResponse(describeLiveStreamsOnlineListRequest);
                System.out.println(new Gson().toJson(describeLiveStreamsOnlineListResponse));
                // todo something.
            } catch (ServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    说明

查看直播流质量

在直播环境中,对直播效果影响最大的就是直播的卡顿。

导致直播卡顿的因素很多,其中之一便是上行传输的流畅度。上行传输不佳对于观看体验影响非常大,会导致所有观众端看到的视频都是卡顿的。视频直播提供了对上行流量监控的功能,您可以及时查看直播流上行传输状态。

  • 控制台

    视频直播支持在控制台查看直播流的基本信息、不同时刻的视频帧率和音频帧率、不同时刻的码率。具体操作,请参见在线流管理

  • API

    接口

    描述

    参考文档

    DescribeLiveDomainFrameRateAndBitRateData

    查询推流域名下直播流流帧率和码率数据。

    查询推流域名流帧率和码率

    DescribeLiveStreamBitRateData

    查询RTMP协议的直播流在设置时间范围内的一组帧率和码率,适用于获取历史数据。

    查询RTMP协议直播流的帧率和码率

    java sdk查询推流域名流帧率和码率的示例代码如下:

            //需要<>内容替换成实际使用的值
            DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
            IAcsClient client = new DefaultAcsClient(profile);
            DescribeLiveDomainFrameRateAndBitRateDataRequest describeLiveDomainFrameRateAndBitRateDataRequest=new DescribeLiveDomainFrameRateAndBitRateDataRequest();
            describeLiveDomainFrameRateAndBitRateDataRequest.setDomainName("<DomainName>");
            //查询时间,格式为:yyyy-MM-ddTHH:mm:ssZ
            describeLiveDomainFrameRateAndBitRateDataRequest.setQueryTime("<UTC时间>");
            try {
                DescribeLiveDomainFrameRateAndBitRateDataResponse describeLiveDomainFrameRateAndBitRateDataResponse = client.getAcsResponse(describeLiveDomainFrameRateAndBitRateDataRequest);
                System.out.println(new Gson().toJson(describeLiveDomainFrameRateAndBitRateDataResponse));
                // todo something.
            } catch (ServerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    说明