什么是旁路直播
旁路直播是区别于主路的一个概念,尤其是使用实时音视频(RTC)的场景中,需要旁路直播来降低直播成本。将实时音视频流转换成标准直播流,观众看到不是多个主播的流,而是把多个主播的流混合在一起的一个画面,即便观众没有安装客户端需要通过小程序、网页观看,也能通过旁路直播来实现。这个时候主播和主播之间是实时的,主播和观众之间的延时大概还有3-5秒。
在即构科技(ZEGO),旁路直播称为旁路推流或转推 CDN,指的是将 RTC 实时音视频流从 ZEGO 实时音视频云”旁路”转推至 CDN(内容分发网络),让海量观众通过标准协议(RTMP / HLS / FLV)使用任意播放器观看直播。
“旁路”的含义在于:主播仍在走 RTC 通道进行实时互动,ZEGO 服务端同时在”旁路”将这路流同步转推给 CDN,两条路径互不干扰,互动与分发并行进行。
旁路直播的典型场景
连麦互动 + 大规模观看
主播与嘉宾通过 RTC 连麦互动,延迟控制在毫秒级;同时,数十万普通观众通过 CDN 拉流观看,无需任何特殊客户端。这是旁路直播核心的使用场景。
秀场直播
主播一路推流至 ZEGO 实时音视频云,ZEGO 自动同步转推至 CDN,观众使用任意播放器收看,整个过程对主播完全透明。
赛事 / 活动直播
多路摄像头的 RTC 流上云后,经过混流合并成一路,再旁路推至 CDN 进行全球分发,满足高并发大规模观看需求。
ZEGO 支持的三种转推 CDN 方式
ZEGO Express SDK(实时音视频 SDK) 支持以下三种将流转推至 CDN 的方式:
| 转推方式 | 说明 | 支持的 CDN |
|---|---|---|
| 默认转推 CDN | 推流到 ZEGO 音视频云后自动转推,无需额外配置 | 仅 ZEGO 自有 CDN |
| 旁路转推 CDN | 开发者自定义指定转推目标 URL,灵活可控 | ZEGO 自有 CDN + 第三方 CDN |
| 混流转推 CDN | 多路流混合成一路后再转推至 CDN | ZEGO 自有 CDN + 第三方 CDN |
说明:除转推 CDN 外,ZEGO 还支持「直推 CDN」方式,即绕过 ZEGO 实时音视频云直接将流推往 CDN。两者的区别详见第四节。
旁路直播的实现原理
整体架构
主播端(ZEGO Express SDK)
↓ RTC 推流(超低延迟)
ZEGO 实时音视频云
├─→ RTC 拉流 ──────→ 连麦观众(毫秒级延迟)
└─→ 旁路转推 ──→ CDN ──→ 海量普通观众
(RTMP / HLS / FLV,标准播放器)
主播只需一次推流,ZEGO 实时音视频云自动完成分叉:一路保持 RTC 低延迟互动,另一路旁路推送至 CDN 供大规模观众观看。
转推 CDN vs 直推 CDN
这两种方式都能让观众通过 CDN 观看直播,但实现路径和适用场景有所不同:
| 功能 | 说明 | 使用场景 |
|---|---|---|
| 转推 CDN (推荐) | 推流先经过 ZEGO 实时音视频云,再由 ZEGO 实时音视频云转推向 CDN。可使用 ZEGO 提供的实时音视频服务,可用于需要连麦互动的场景。 | 开发者与第三方 CDN 有业务合作,想要使用原有的第三方 CDN 流媒体网络的分发服务的同时又想使用 ZEGO Express SDK 进行实时连麦互动。适用于有连麦互动要求的业务场景,例如秀场直播、语聊房等。 |
| 直推 CDN | 推流不经过 ZEGO 实时音视频云,直接推向 CDN。无法使用 ZEGO 提供的实时音视频服务,适用于单直播场景(无需互动)。 | 适用于开发者无需使用实时连麦互动等服务的情况,例如电商直播、游戏直播、大班课等。 |
旁路直播的实现步骤(客户端 SDK 方式)
前提条件
- 已在 ZEGO 控制台 创建项目,获取有效的 AppID 和 AppSign
- 已集成 ZEGO Express SDK,并实现基本的音视频推拉流功能
- 已在 ZEGO 控制台开通 CDN 服务(路径:项目管理 → 服务配置 → CDN)
注意:CDN 直播功能不是默认开启的,使用前需自助开通或联系 ZEGO 技术支持。
步骤一:初始化引擎并登录房间
请参考快速开始 – 实现流程的 “创建引擎”、“登录房间”。
步骤二:开始推流
// Android 示例
engine.startPublishingStream("STREAM_ID");
步骤三:添加旁路转推 CDN 地址
推流成功后,调用 addPublishCdnUrl 接口,将已成功推向 ZEGO 实时云的流动态转推至指定 CDN 地址。支持的转推地址格式为 RTMP。
// Android 示例
String streamID = "STREAM_ID";
// 转推目标地址,格式:rtmp://推流域名/接入点/streamID
String cdnUrl = "rtmp://your-cdn-domain/live/STREAM_ID";
engine.addPublishCdnUrl(streamID, cdnUrl, errorCode -> {
if (errorCode == 0) {
// 转推成功,观众现在可以通过 CDN 拉流观看
} else {
// 转推失败,检查网络或 CDN 地址配置
}
});
说明:addPublishCdnUrl 支持动态调用,可随时向一路流添加多个 CDN 转推目标,实现多 CDN 并发分发。
步骤四:停止旁路转推
当不再需要将流转推至 CDN 时,调用 removePublishCdnUrl 停止转推:
// Android 示例
engine.removePublishCdnUrl(streamID, cdnUrl, errorCode -> {
if (errorCode == 0) {
// 停止转推成功
} else {
// 停止转推失败,可能由于网络原因请求发送失败
}
});
更多详细细节可访问开发者文档:使用 CDN 直播
进阶:混流 + 旁路直播
在多主播连麦场景下,观众通常只需看到合并后的一路完整画面,而不是多路独立的画面。此时需要先混流,再旁路推 CDN。
多人连麦旁路直播架构
主播 A 推流 ─┐
主播 B 推流 ─┤→ ZEGO 混流服务 → 合流输出 → 旁路转推 → CDN → 观众
嘉宾 C 推流 ─┘
混流服务将多路流按照开发者配置的布局(画中画、并排等)合并成一路,再转推至 CDN,观众只需拉取这一路混流地址即可。
多码率输出方案
在需要同时支持 H.265 和 H.264 设备的场景下,有两种方案:
方案一(推荐):混流服务直接输出多码率
混流服务同时输出一路 H.265 混流和一路 H.264 混流,将两路流都推至 CDN。
- 优点:只需在混流时转码一次,清晰度更高,CDN 费用更低
- 观众根据自身设备是否支持 H.265 解码,自行选择拉取对应码率
方案二:混流推 CDN 后再转码
混流服务输出一路 H.265,由 CDN 的转码能力再转出一路 H.264。
- 缺点:需要 CDN 额外转码,费用更高,清晰度相对较低
- 使用此方案需联系 ZEGO 技术支持开通 CDN 转码功能
常见问题
Q1:旁路直播功能是否默认开启?
不是。CDN 直播功能需要在 ZEGO 控制台中自助开通(路径:项目管理 → 服务配置 → CDN),或联系 ZEGO 技术支持开通后方可使用。
Q2:enablePublishDirectToCDN(直推 CDN)和 addPublishCdnUrl(旁路转推)能同时使用吗?
不能。调用 enablePublishDirectToCDN 开启直推 CDN 后,addPublishCdnUrl 和 removePublishCdnUrl 将不再生效。原因是直推 CDN 的流不经过 ZEGO 实时音视频云,因此 ZEGO 实时云无法对该路流进行动态转推操作。
Q3:出现错误码 1000038 该如何排查?
调用 enablePublishDirectToCDN 时出现 1000038 错误码,可能原因包括:
- CDN 推流域名配置错误
- 媒体网络异常
- 媒体网络链接为空
请检查 CDN 域名配置是否正确,或联系 ZEGO 技术支持协助排查。
Q4:旁路转推是否支持第三方 CDN?
支持。旁路转推 CDN 和混流转推 CDN 均支持 ZEGO 自有 CDN 和第三方 CDN;默认转推 CDN 仅支持 ZEGO 自有 CDN。
原创文章,作者:ZEGO即构科技,如若转载,请注明出处:https://market-blogs.zego.im/reports-baike/3315/