ZEGO Express SDK 支持推流到 CDN(Content Delivery Network,内容分发网络),包括转推 CDN 和直推 CDN 两种功能。开发者基于该功能可打通 RTC 产品和 CDN 直播产品,方便用户从网页或第三方播放器直接观看和收听直播内容。为了保证安全,推流到 CDN 时默认开启 CDN 鉴权。
为防止攻击者盗取或伪造您的推流 URL 地址,您可以参考 CDN 推流鉴权,提升您推流使用的安全性。
在发起转推或直推 CDN 时需注意,CDN 对音视频格式有所要求,推流端音频支持 AAC 与 MP3,视频支持 H.264 与 H.265(需要 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。 |
直推 CDN 指的是将音视频流直接从本地客户端推送到 CDN 的过程,用户可直接通过拉流 URL 地址从网页或第三方播放器进行观看。但由于直推 CDN 功能在网络传输过程中不经过 ZEGO 实时音视频云,因此开发者无法使用 ZEGO 的实时音视频服务。
两种功能的说明与使用场景如下:
功能 | 说明 | 使用场景 |
---|---|---|
转推 CDN (推荐) |
推流先经过 ZEGO 实时音视频云,再由 ZEGO 实时音视频云转推向 CDN。可使用 ZEGO 提供的实时音视频服务,可用于需要连麦互动的场景。 |
开发者与第三方 CDN 有业务合作,想要使用原有的第三方 CDN 流媒体网络的分发服务的同时又想使用 ZEGO Express SDK 进行实时连麦互动。适用于有连麦互动要求的业务场景,例如秀场直播、语聊房等。 |
直推 CDN |
推流不经过 ZEGO 实时音视频云,直接推向 CDN。无法使用 ZEGO 提供的实时音视频服务,适用于单直播场景(无需互动)。 |
适用于开发者无需使用实时连麦互动等服务的情况,例如电商直播、游戏直播、大班课等。 |
在使用 CDN 直播之前,请确保:
CDN 直播功能不是默认开启的,使用前请在 ZEGO 控制台 自助开通(开通步骤请参考 项目管理 - 服务配置 中的“CDN”),或联系 ZEGO 技术支持开通。
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/AdvancedStreaming/StreamByCDN” 目录下的文件。
若选择使用直推 CDN 功能,则无需执行本节所有步骤,请参考 直推 CDN。
请参考 快速开始 - 实现流程 的 “创建引擎”、“登录房间”。
请参考 快速开始 - 实现流程 的 “推流”。
当推流成功后,调用 addPublishCdnUrl 接口增加动态转推至 CDN 的 URL,即可将已经成功推向 ZEGO 实时云的音视频流动态向第三方 CDN 进行转推。支持的转推地址格式为 “rtmp”。
// 推流成功后,开始转推到 CDN
// 推流时使用的流 ID
std::string streamID = "STREAM_ID";
// 需要转推的 CDN 地址,请开发者按照实际 URL 填入,streamID 为推流的流名,可自定义
std::string URL = "rtmp://推流域名/接入点/streamID";
engine->addPublishCdnUrl(streamID, URL, [=](int errorCode){
if(errorCode == 0)
{
// 转推成功
} else
{
// 转推失败,可能由于网络原因转推请求发送失败
}
});
若需监听 CDN 回调的状态通知,可参考 监控 CDN 转推状态。
调用 removePublishCdnUrl 即可删除动态转推至 CDN 的 URL。调用 removePublishCdnUrl 接口停止转推时,请确保当前流 streamID 是存在的。
该接口并不会停止推往 ZEGO 实时音视频云的音视频流。
// 推流时使用的流 ID
std::string streamID = "STREAM_ID";
// 需要停止转推的 CDN 地址,请开发者按照实际 URL 填入,streamID 为推流的流名
std::string URL = "rtmp://推流域名/接入点/streamID";
engine->removePublishCdnUrl(streamID, URL, [=](int errorCode){
if(errorCode == 0)
{
// 停止转推成功
} else
{
// 停止转推失败,可能由于网络原因停止转推请求发送失败
}
});
若选择使用转推 CDN 功能,则无需执行本节所有步骤,请参考 转推 CDN。
在推流前调用 enablePublishDirectToCDN 接口将音视频流直接推往 CDN。
ZegoCDNConfig config;
// URL 需要开发者根据实际情况填写,streamID 为推流的流名,可自定义
config.url = "rtmp://推流域名/接入点/streamID";
engine->enablePublishDirectToCDN(true, &config);
engine->startPublishingStream("STREAM_ID");
若需停止直推 CDN,调用 stopPublishingStream 接口停止推流即可。
停止推流后,若下一次推流无需直推 CDN,则可以调用 enablePublishDirectToCDN 接口并传值为 “false” 关闭直推 CDN 功能。在推流途中调用此接口不会影响此次推流。
engine->stopPublishingStream();
ZegoCDNConfig cdnConfig;
engine->enablePublishDirectToCDN(false, &cdnConfig);
当推流方直推 CDN 时,拉流方可以直接通过 streamID 进行拉流,请参考 快速开始 - 实现流程 的 “拉流”。
当音视频流转推 CDN 成功后,开发者希望用户从 CDN 进行拉流时,需要使用传入 URL 的自定义拉流方式进行拉流,而不能通过流 ID 进行拉流。URL 拉流的操作步骤可参考 通过 URL 拉流 中的 “1 配置拉流参数” 和 “2 开始拉流”。
联系我们
文档反馈