提交工单
咨询集成、功能及报价等问题
本文档暂不适用于 Web 平台。
当推流端使用第三方推流工具(例如 OBS 软件、网络摄像头 IP Camera 等)将流推到 CDN 时,或通过 ZEGO SDK 转推 CDN 功能将音视频画面推送到第三方 CDN 上时,可直接传入 URL 地址进行拉流。
请参考 下载示例源码 获取源码。
相关源码请查看 “lib\topics\StreamAdvanced\stream_by_cdn” 目录下的文件。
在实现 URL 拉流功能之前,请确保:
直接通过 CDN 的 URL 地址拉流,需要使用 ZegoCDNConfig 对象来填入 URL 参数,如果对应的 CDN 配置了拉流鉴权,还需要通过 authParam
字段填入鉴权参数。
authParam
字段。// 设置 CDN 参数
// URL 为 CDN 拉流地址
String url = "rtmp://xxxxxxxx";
// 如果需要鉴权则要设置鉴权参数,如果不需要鉴权可以不设置(鉴权参数不能带"?"字符)
String authParam = "xxx";
var config = ZegoCDNConfig(url, authParam);
var zegoPlayerConfig = ZegoPlayerConfig.defaultConfig();
zegoPlayerConfig.cdnConfig = config;
通过调用 startPlayingStream 接口开始拉流。
拉流时,如果出现错误,请参考 常见错误码 - 1004xxx 拉流相关的错误码。
// 开始拉流,设置远端拉流渲染视图 canvas,视图模式采用 SDK 默认的模式,等比缩放填充整个 View
// 若使用实时音视频 SDK 或者音视频场景时,填写了 URL 参数后,SDK 会从 URL 拉取音视频流,但此时依然需要传递一个唯一的 streamID 到 SDK,SDK 内部会以该 streamID 标识这条流
ZegoExpressEngine.instance.startPlayingStream("STREAM_ID", canvas: ZegoCanvas(viewID), config: zegoPlayerConfig);
// 若使用实时语音 SDK 或者纯音频场景时,不需要传 canvas 参数
// ZegoExpressEngine.instance.startPlayingStream("STREAM_ID", config: zegoPlayerConfig);
若要停止拉流,调用 stopPlayingStream 接口。
// 停止拉流
// 停止拉流时传递的是拉流时传入的 streamID
ZegoExpressEngine.instance.stopPlayingStream("STREAM_ID");
可以通过 onPlayerStateUpdate 来监听从 CDN 拉流的结果。
如果不是使用 ZEGO SDK 进行推流,而是使用第三方推流工具直接进行推流、但是使用 ZEGO SDK 进行拉流,这种场景下推流方没有使用 ZEGO SDK 加入房间,拉流方默认收不到 onRoomStreamUpdate 的回调,可以使用 增加房间流 与 删除房间流 的功能,让拉流端可以收到 onRoomStreamUpdate 的回调。
ZegoExpressEngine.onPlayerStateUpdate(String streamID, ZegoPlayerState state, int errorCode, Map<String, dynamic> extendedData) = {
// 调用拉流接口成功后,当拉流器状态发生变更,如出现网络中断导致推流异常等情况,SDK 在重试拉流的同时,会通过该回调通知
// 1. 当收到该回调通知且 state 为 Playing 时,表示拉流成功
// 2. 当收到该回调通知且 state 为 PlayRequesting 时,表示可能是正在拉流或者由于网络中断等原因导致 SDK 正在重试拉流
// 3. 当收到该回调通知且 state 为 NoPlay 时,表示拉流停止
// 4. 通过 URL 拉流时,回调参数中的 streamID 即为调用拉流 API 时的流 ID,用于唯一标识当次拉流事件。
};
联系我们
文档反馈