logo
当前页

从 CDN 拉流


本文将为您介绍在使用 ZEGO 直播服务时,如何拉取已转推或直推到 CDN 的流。

前提条件

在开始之前,请确保您已完成以下步骤:

实现流程

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

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

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

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

// 如下 playView 为 UI 界面上 View.
ZegoPlayerConfig *playerConfig = [[ZegoPlayerConfig alloc] init];
playerConfig.resourceMode = ZegoStreamResourceModeOnlyCDN;
[[ZegoExpressEngine sharedEngine] startPlayingStream:streamID canvas:[ZegoCanvas canvasWithView:self.view] config:playerConfig];

// 房间内流的状态更新回调。
- (void)onRoomStreamUpdate:(ZegoUpdateType)updateType
             streamList:(NSArray<ZegoStream *> *)streamList
           extendedData:(nullable NSDictionary *)extendedData
                  roomID:(NSString *)roomID {
    // 如果用户想要播放房间内其他用户推流的流,可以在 updateType == ZegoUpdateTypeAdd 时,
    // 使用 `streamList` 参数中得到的相应 streamID 调用 startPlayingStream 方法。
    if (updateType == ZegoUpdateTypeAdd) {
        for (ZegoStream *stream in streamList) {
            [self startPlayStreamWithStreamID:stream.streamID];
        }
    } else {
        for (ZegoStream *stream in streamList) {
            [self stopPlayStreamWithStreamID:stream.streamID];
        }
    }
}

Previous

推流至 CDN

Next

CDN 推流鉴权