视频直播提供丰富的流管理功能,包括禁推、禁播、中断直播流和恢复直播流,以及查看在线流、历史流、禁推流及其详细信息。本文介绍直播流管理的功能及方法。
禁推直播流
视频直播提供了丰富的直播流管理功能,其中禁推直播流功能可帮助您在遇到下列情况的时候,对某路直播推流进行禁止推流的操作。
鉴权推流地址暴露。
用户恶意推流。
业务需求。
禁推直播流会让直播流加入黑名单(一段时间内将不能再进行推流),若只是想对指定直播流进行中断操作,请参见中断直播流。
使用方法
控制台:视频直播支持在控制台查看禁推流、设置禁推流和恢复禁推流。设置禁推流,请参见在线流管理。查看或恢复禁推流,请参见禁推流管理。
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(); }
说明以上示例代码表示查询域名<DomainName>的在线流。AppName包含<AppName>,StreamName包含<StreamName>。
使用JAVA SDK,具体请参见Java SDK使用说明。
返回数据说明,请参见查询域名在线流列表。
查看直播流质量
在直播环境中,对直播效果影响最大的就是直播的卡顿。
导致直播卡顿的因素很多,其中之一便是上行传输的流畅度。上行传输不佳对于观看体验影响非常大,会导致所有观众端看到的视频都是卡顿的。视频直播提供了对上行流量监控的功能,您可以及时查看直播流上行传输状态。
控制台
视频直播支持在控制台查看直播流的基本信息、不同时刻的视频帧率和音频帧率、不同时刻的码率。具体操作,请参见在线流管理。
API
接口
描述
参考文档
DescribeLiveDomainFrameRateAndBitRateData
查询推流域名下直播流流帧率和码率数据。
DescribeLiveStreamBitRateData
查询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(); }
说明以上示例代码表示查询推流域名<DomainName>下<UTC时间>的推流帧率和码率数据。
使用JAVA SDK,具体请参见Java SDK使用说明。
返回数据说明,请参见查询推流域名流帧率和码率。