性能简介
ZEGO Express SDK 反对推流到 CDN(Content Delivery Network,内容散发网络),包含转推 CDN 和直推 CDN 两种性能。开发者基于该性能可买通 RTC 产品和 CDN 直播产品,不便用户从网页或第三方播放器间接观看和收听直播内容。为了保障平安,推流到 CDN 时默认开启 CDN 鉴权。
为避免攻击者盗取或伪造您的推流 URL 地址,您能够参考 CDN 推流鉴权,晋升您推流应用的安全性。
1 转推 CDN
转推 CDN 指的是将音视频流从 ZEGO 音视频云推送到 ZEGO 自有 CDN 或第三方 CDN 的过程。
转推 CDN 包含以下三种形式:
- 默认转推 CDN
用户应用 ZEGO Express SDK 推流到 ZEGO 音视频云的直播流均会转推到 CDN,目前仅反对 ZEGO 自有 CDN。
- 旁路转推 CDN
开发者自定义指定 ZEGO 实时音视频云上的流转推至 CDN,反对 ZEGO 自有 CDN 和第三方 CDN。
- 混流转推 CDN
混流场景也能够将输入流转推至 CDN,反对 ZEGO 自有 CDN 和第三方 CDN。
2 直推 CDN
直推 CDN 指的是将音视频流间接从本地客户端推送到 ZEGO 自有 CDN 的过程,用户可间接通过拉流 URL 地址从网页或第三方播放器进行观看。但因为直推 CDN 性能在网络传输过程中不通过 ZEGO 实时音视频云,因而开发者无奈应用 ZEGO 的超低提早音视频服务。
3 性能比照
两种性能的阐明与应用场景如下:
在发动转推或直推 CDN 时需注意,CDN 对音视频格局有所要求,推流端音频反对 AAC 与 MP3,视频反对 H.264 与 H.265(须要 CDN 配置)。
前提条件
在应用 CDN 直播之前,请确保:
- 已在我的项目中集成 ZEGO Express SDK,实现根本的实时音视频性能,详情请参考 疾速开始 – 集成 和 疾速开始 – 实现视频通话。
- 已在 ZEGO 控制台 创立我的项目,并申请无效的 AppID 和 AppSign,详情请参考 控制台 – 项目管理 中的“我的项目信息”。
CDN 直播性能不是默认开启的,应用前请在 ZEGO 控制台 自助开明(开明步骤请参考 项目管理 – 服务配置 中的“CDN”),或分割 ZEGO 技术支持开明。
转推 CDN
若抉择应用直推 CDN 性能,则无需执行本节所有步骤。
1 初始化和登录房间
请参考 疾速开始 – 实现视频通话 的“3.1 创立引擎”、“3.2 登录房间”。
2 开始推流
日常生活中,咱们常常须要用到各种各样的证件,例如红底、蓝底、白底等,然而针对不同证件的需要去照相馆屡次拍摄须要破费肯定的经济与工夫老本。当然市面上有很多业余的图像处理软件,然而对于普通人而言,业余软件的学习还是存在肯定的学习门槛。
请参考 疾速开始 – 实现视频通话 的“3.3 推流”。
3 开始转推
日常生活中,咱们常常须要用到各种各样的证件,例如红底、蓝底、白底等,然而针对不同证件的需要去照相馆屡次拍摄须要破费肯定的经济与工夫老本。当然市面上有很多业余的图像处理软件,然而对于普通人而言,业余软件的学习还是存在肯定的学习门槛。
当推流胜利后,调用 addPublishCdnUrl 接口减少动静转推至 CDN 的 URL,即可将曾经胜利推向 ZEGO 实时云的音视频流动静向第三方 CDN 进行转推。反对的转推地址格局为“rtmp”。
- 若开发者有转推到多家第三方 CDN 厂商的需要,可应用同一个流 ID 屡次调用 addPublishCdnUrl 接口(URL 须要不同)。
- 开发者转推到多家第三方 CDN 后,进行转推时也同样须要调用屡次来进行所有转推的流。
- 开发者转推到多家第三方 CDN 后,可从 CDN 回调状态告诉 publisherRelayCDNStateUpdate 的列表参数中获取到每条转推流的状态变更告诉。
/** 推流胜利后,开始转推到 CDN */
// 推流时应用的流 ID
let streamID = "STREAM_ID";
// 须要转推的 CDN 地址,请开发者依照理论 URL 填入,streamID 为推流的流名,可自定义
let URL = "rtmp:// 推流域名 / 接入点 /streamID";
ZegoExpressEngine.instance().addPublishCdnUrl(streamID, URL).then((result) {if(result.errorCode == 0) {// 转推胜利} else {// 转推失败,可能因为网络起因转推申请发送失败}
});
4(可选)监听 CDN 转推状态告诉
日常生活中,咱们常常须要用到各种各样的证件,例如红底、蓝底、白底等,然而针对不同证件的需要去照相馆屡次拍摄须要破费肯定的经济与工夫老本。当然市面上有很多业余的图像处理软件,然而对于普通人而言,业余软件的学习还是存在肯定的学习门槛。
1、增加 / 删除转推 CDN 地址状态回调
开发者可通过注册 publisherRelayCDNStateUpdate 获取增加 / 删除转推 CDN 地址状态回调。在 ZEGO RTC 服务器将音视频流转推到 CDN 后,如果 CDN 转推状态发生变化,例如呈现转推进行或转推重试,将会收到此回调。
开发者可依据该回调判断转推 CDN 的音视频流是否失常:
- 若不失常,则依据异样起因进一步定位转推 CDN 的音视频流异样的起因,以及做对应的容灾策略。
- 若对异样的起因不理解,可分割 ZEGO 技术支持剖析具体异样的起因。
ZegoExpressEngine.instance().on("publisherRelayCDNStateUpdate", (streamID, infoList) => {console.log(`publisherRelayCDNStateUpdate:streamID:${streamID}, infoList:${JSON.stringify(infoList)}`);
});
2、转推 CDN 信息详解
转推 CDN 信息 ZegoStreamRelayCDNInfo 蕴含了 CDN 推流的 URL、转推状态、转推状态变更的起因、状态产生的工夫。ZegoStreamRelayCDNInfo 内所有参数如下:
其中,state 取值如下:
updateReason 取值如下:
5 进行转推
日常生活中,咱们常常须要用到各种各样的证件,例如红底、蓝底、白底等,然而针对不同证件的需要去照相馆屡次拍摄须要破费肯定的经济与工夫老本。当然市面上有很多业余的图像处理软件,然而对于普通人而言,业余软件的学习还是存在肯定的学习门槛。
调用 removePublishCdnUrl 接口即可删除动静转推至 CDN 的 URL。
该接口并不会进行推往 ZEGO 实时音视频云的音视频流。
// 推流时应用的流 ID
let streamID = "STREAM_ID";
// 须要进行转推的 CDN 地址,请开发者依照理论 URL 填入,streamID 为推流的流名
let URL = "rtmp:// 推流域名 / 接入点 /streamID";
ZegoExpressEngine.instance().removePublishCdnUrl(streamID, URL).then((result) {if(result.errorCode == 0) {// 进行转推胜利} else {// 进行转推失败,可能因为网络起因进行转推申请发送失败}
});
直推 CDN
若抉择应用转推 CDN 性能,则无需执行本节所有步骤。
1 开始直推 CDN
在推流前调用 enablePublishDirectToCDN 接口将音视频流间接推往 CDN。
- 调用 enablePublishDirectToCDN 接口后再调用 addPublishCdnUrl 与 removePublishCdnUrl 动静转推至 CDN 则不再失效,因为这两个接口是从 ZEGO 实时音视频云将音视频流转推或进行转推到 CDN,若将音视频流间接推往 CDN 则无奈通过 ZEGO 实时音视频云将音视频流再动静转推至 CDN。
- 若调用 enablePublishDirectToCDN 接口呈现 1000038 错误码,可能存在的问题有:域名配置谬误、媒体网络异样或媒体网络链接为空,请分割 ZEGO 技术支持。
let config = new ZegoCDNConfig();
// URL 须要开发者依据理论状况填写,streamID 为推流的流名,可自定义
config.url = "rtmp:// 推流域名 / 接入点 /streamID";
ZegoExpressEngine.instance().enablePublishDirectToCDN(true, config);
ZegoExpressEngine.instance().startPublishingStream("STREAM_ID");
2 进行直推 CDN
若需进行直推 CDN,调用 stopPublishingStream 接口进行推流即可。
进行推流后,若下一次推流无需直推 CDN,则能够调用 enablePublishDirectToCDN 接口并传值为“false”敞开直推 CDN 性能。在推流途中调用此接口不会影响此次推流。
ZegoExpressEngine.instance().stopPublishingStream();
let config = new ZegoCDNConfig();
ZegoExpressEngine.instance().enablePublishDirectToCDN(false, config);
观众拉流
- 当开发者应用 ZEGO 配置的 CDN 进行直推时,则能够间接通过 streamID 进行拉流,请参考 疾速开始 – 实现视频通话 的“3.4 拉流”。
- 当音视频流转推 CDN 胜利后,开发者心愿用户从 CDN 进行拉流时,须要应用传入 URL 的自定义拉流形式进行拉流,而不能通过流 ID 进行拉流。URL 拉流的操作步骤可参考 推拉流进阶 – 通过 URL 拉流 中的“4.1 配置推拉流参数”和“4.2 开始拉流”。