畅直播
  • iOS
  • Android : Java
  • macOS
  • Windows
  • Web
  • Flutter
  • 产品简介
    • 概述
    • 发布日志
    • 基本概念
    • 产品优势
    • 应用场景
    • 限制说明
    • 升级指南
  • 计费说明
  • 下载
  • 快速开始
  • 直播推流
  • 直播拉流
  • 基础功能
  • 进阶功能
  • 最佳实践
  • 常用错误码
  • 服务端 API
  • 客户端 API
  • 常见问题

CDN 直播拉流

更新时间:2022-11-30 15:30

1 功能简介

CDN 直播拉流,优选第三方 CDN 云厂商,工程化调优后可实现直播端到端延迟 3s 左右,但 CDN 直播基于 TCP 协议实现(TCP 有延迟确认和捎带应答),其抗弱网能力有限。

2 前提条件

在使用 CDN 直播拉流之前,请确保:

3 使用步骤

3.1 开通服务

  • CDN 直播功能不是默认开启的,使用前请在 ZEGO 控制台 自助开通(开通步骤请参考 项目管理 - 服务配置 中的“CDN”),或联系 ZEGO 技术支持开通。
  • 通过 URL 从第三方 CDN 拉流功能不是默认开启的,请联系 ZEGO 技术支持开通。

3.2 CDN 拉流

您可以根据需要选择如下拉流方式:

  • 通过 streamID 拉转推至 ZEGO CDN 的流(推荐)

在同一房间内的其他用户将音视频流推送到 ZEGO 实时音视频云后再转推到 ZEGO CDN 时,我们会在 onRoomStreamUpdate 回调中收到音视频流新增的通知,并可以通过 ZegoStream 获取到某条流的 “streamID”。

我们可以在该回调中,调用 startPlayingStream 接口,传入 “streamID” 拉取播放该用户的音视频。您可通过监听 onPlayerStateUpdate 回调知晓是否成功拉取音视频。

// playView 为 UI 界面上 View.
ZegoCanvas playCanvas = new ZegoCanvas(playView);
ZegoPlayerConfig playerConfig = new ZegoPlayerConfig();
playerConfig.resourceMode = ZegoStreamResourceMode.ONLY_CDN;
engine.startPlayingStream(playStreamID, playCanvas, playerConfig);
  • 通过 streamID 拉直推至 ZEGO CDN 的流

在同一房间内的其他用户将音视频流推送到 ZEGO CDN 时,我们会在 onRoomStreamUpdate 回调中收到音视频流新增的通知,并可以通过 ZegoStream 获取到某条流的 “streamID”。

我们可以在该回调中,调用 startPlayingStream 接口,传入 “streamID” 拉取播放该用户的音视频。您可通过监听 onPlayerStateUpdate 回调知晓是否成功拉取音视频。

// playView 为 UI 界面上 View.
ZegoCanvas playCanvas = new ZegoCanvas(playView);
ZegoPlayerConfig playerConfig = new ZegoPlayerConfig();
playerConfig.resourceMode = ZegoStreamResourceMode.ONLY_CDN;
engine.startPlayingStream(playStreamID, playCanvas, playerConfig);
  • 通过 URL 拉第三方 CDN 的流

调用 startPlayingStream 接口,在 ZegoCDNConfig 中填入 CDN 的 URL地址进行拉流。

  • 通过 URL 拉流时,不能直接通过填入 “streamID” 进行拉流,实际拉流画面以 URL 为准。
  • 虽然此时 “streamID” 不能用于拉流,但 SDK 内部仍以 “streamID” 作为唯一标识,用于后续拉流相关回调中。因此 “streamID” 仍需要在整个 AppID 内全局唯一。
// playView 为 UI 界面上 View.
ZegoCanvas playCanvas = new ZegoCanvas(playView);
ZegoCDNConfig config = new ZegoCDNConfig();
config.url = "your_url";
ZegoPlayerConfig playerConfig = new ZegoPlayerConfig();
playerConfig .cdnConfig = config;
playerConfig.resourceMode = ZegoStreamResourceMode.ONLY_CDN;
engine.startPlayingStream(playStreamID, playCanvas, playerConfig);