融云 CDN
SDK 从 5.2.5 版本开始支持该功能。
当您使用 RTCLib SDK 做直播应用时,可以选用融云 CDN 服务分发直播媒体流。融云 CDN 服务能确保在不同区域、不同场景下加速直播内容的分发,提高资源访问速度。(注:下文中出现的内置 CDN
指的就是 融云 CDN
)
融云 CDN 服务架构
主播端用 RTC 协议发布音视频资源,资源由融云服务端接收,并转协议到 RTMP 并推给 CDN。视频编码协议为 h.264。
观众端可以感知到主播推流、服务端合流状态变化,无需 App Server 做过多的任务管理。观众端 App 可以调接口来选择订阅 CDN 链路或者 RTC 低延迟链路的直播流。
CDN 拉流时,默认按 CDN 服务输出的视频格式拉流,也可以调接口设置指定的拉流分辨率、码率、帧率( 说明:会触发 CDN 转码服务)。
服务架构图:
主要业务流程图:
服务开通与配置
融云 CDN 是付费增值服务,且需要开通后才能使用。详见融云 CDN 服务配置。
启用内置 CDN
该步骤仅适用于控制台配置的 CDN 推流方式为手动 的场景。如果您在控制台配置的 CDN 推流方式为自动,所有直播房间的直播流都会自动推流到 CDN,观众可随时订阅,无需使用此接口启用内置 CDN。
如果控制台配置的 CDN 推流方式为手动,可在直播主播开始推流后,根据产品设计自定决定何时让融云服务开始或停止推流到 CDN。
如需启用内置 CDN,请在主播加入房间成功,并且发布资源成功后,使用 RCRTCEngine
对象的 enableLiveMixInnerCdnStream
方法进行设置。该方法在整个直播过程中都可以操作开关。
Future<int> enableLiveMixInnerCdnStream(bool enable);
参数 | 类型 | 说明 |
---|---|---|
enable | bool | 是否开启 |
该方法在整个直播过程中都可以操作开关。开启或关闭内置 CDN 时,观众均会收到对应回调。
-
开启内置 CDN 时:
房间中的观众会收到
RCRTCEngine
对象的onRemoteLiveMixInnerCdnStreamPublished
回调。 -
关闭内置 CDN 时:
房间中观众会收到
RCRTCEngine
对象的onRemoteLiveMixInnerCdnStreamUnpublished
回调。
代码示例:
engine.enableLiveMixInnerCdnStream(enable);
获取房间内 CDN 资源
观众可在加入房间之前设置 onRemoteLiveMixInnerCdnStreamPublished
回调,用于获取房间内 CDN 资源发布的事件。设置 onRemoteLiveMixInnerCdnStreamUnpublished
回调,用于获取房间内 CDN 资源取消发布的事件。
engine.onRemoteLiveMixInnerCdnStreamPublished = () {
print('房间内 CDN 资源发布的事件');
};
engine.onRemoteLiveMixInnerCdnStreamUnpublished = () {
print('房间内 CDN 资源取消发布的事件');
};
订阅 CDN 资源
观众可以调用 RCRTCEngine
对象的 subscribeLiveMixInnerCdnStream
方法订阅房间中的融云 CDN 资源。默认订阅 CDN 流的原始分辨率、帧率。
Future<int> subscribeLiveMixInnerCdnStream();
订阅 CDN 资源的步骤如下:
-
创建一个 RCRTCView,并设置为视频流的预览窗口。
/// 创建预览窗口
RCRTCView view = await RCRTCView.create();
/// 设置视频流的预览窗口
engine.setLiveMixInnerCdnStreamView(view); -
(可选)在调用订阅方法前,可以调用以下方法设置本次订阅的分辨率与帧率。订阅成功后,也可以使用以下方法切换分辨率与帧率。
setLocalLiveMixInnerCdnVideoResolution
:设置分辨率setLocalLiveMixInnerCdnVideoFps
:设置帧率
可通过
onLocalLiveMixInnerCdnVideoResolutionSet
和onLocalLiveMixInnerCdnVideoFpsSet
回调获取分辨率和帧率是否设置成功。 -
订阅融云 CDN 资源。如未主动设置本地订阅的分辨率或帧率,默认使用 CDN 流的原始分辨率、帧率。
/// 订阅融云 CDN 资源
engine.subscribeLiveMixInnerCdnStream();
取消订阅
观众可以调用 RCRTCEngine
对象的 unsubscribeLiveMixInnerCdnStream
方法取消订阅融云 CDN 资源。
Future<int> unsubscribeLiveMixInnerCdnStream();
示例代码:
engine.unsubscribeLiveMixInnerCdnStream();
动态切换分辨率和帧率
观众订阅融云 CDN 资源成功后,调用 RCRTCEngine
对象的 setLocalLiveMixInnerCdnVideoResolution
方法切换需要观看的分辨率,调用 setLocalLiveMixInnerCdnVideoFps
方法切换需要观看的帧率。
/**
* 下面两个方法有两个不同的调用时机如下:
* 1. 当没有调用 subscribeLiveMixInnerCdnStream 订阅融云 CDN 流时,订阅前指定观看的分辨率、帧率。
* 2. 已经调用 subscribeLiveMixInnerCdnStream 订阅融云 CDN 流后,切换已经订阅的融云 CDN 视频流的分辨率、帧率。
*/
Future<int> setLocalLiveMixInnerCdnVideoResolution(int width, int height);
Future<int> setLocalLiveMixInnerCdnVideoFps(RCRTCVideoFps fps);
代码示例:
/// 设置观看 CDN 视频流 的分辨率
engine.setLocalLiveMixInnerCdnVideoResolution(720, 1280);
/// 设置观看 CDN 视频流的帧率
engine.setLocalLiveMixInnerCdnVideoFps(RCRTCVideoFps.fps_15);
设置 CDN 流禁用状态
观众订阅融云 CDN 流成功后,调用 RCRTCEngine
对象的 muteLiveMixInnerCdnStream
方法禁用或启用 CDN
流渲染。
Future<int> muteLiveMixInnerCdnStream(bool mute);
参数 | 类型 | 说明 |
---|---|---|
mute | bool | true :停止资源渲染;false :恢复资源渲染 |
代码示例:
engine.muteLiveMixInnerCdnStream(true);