前言一、前提条件二、示例源码下载三、使用步骤
1、创建引擎2.开启房间内用户变化通知3.预览自己的画面,并推送到远端4.拉取音视频流API 调用时序图参考 提示
前言
本文展示了如何使用 ZEGO Express SDK 构造多人视频通话场景,即实现多对多实时音视频互动。用户可在房间内与其余用户进行实时视频通话,互相推拉流。该场景可用于多人实时视频聊天、视频会议等。
一、前提条件
在应用多人视频通话场景之前,请确保:
已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目管理。 二、示例源码下载
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Scenes/src/main/java/im/zego/Scenes/VideoForMultipleUsers” 目录下的文件。
三、使用步骤 本节将介绍如何使用 ZEGO Express SDK 实现多人视频通话,流程图如下:
定义 SDK 引擎对象,调用 createEngine 接口,将申请到的 AppID 和 AppSign 传入参数 “appID” 和 “appSign”,创建引擎单例对象。
如果需要注册回调代理,可将实现了 IZegoEventHandler 的对象传入参数 “eventHandler”。如果不需要注册回调代理,可将 “null” 传入参数 “eventHandler”,创建引擎后仍需要注册回调时可通过调用 setEventHandler 接口设置回调代理。
代码如下(示例):
ZegoExpressEngine engine;ZegoEngineProfile profile = new ZegoEngineProfile();profile.appID = appID;profile.appSign = appSign;profile.scenario = ZegoScenario.GENERAL;profile.application = getApplication();engine = ZegoExpressEngine.createEngine(profile, null);
2.开启房间内用户变化通知开发者需在每位用户登录房间时将 ZegoRoomConfig 中的 “isUserStatusNotify” 设为 “true”,用于接收其他用户进出房间的回调通知。
代码如下:
ZegoRoomConfig RoomConfig = new ZegoRoomConfig();RoomConfig.isUserStatusNotify = true;// 登录房间engine.loginRoom(roomID, user, RoomConfig);
3.预览自己的画面,并推送到远端在用户调用 loginRoom 之后,可以调用 startPublishingStream 接口,传入 “streamID”,将自己的音视频流推送到 ZEGO 音视频云。您可通过回调 setEventHandler 监听 onPublisherStateUpdate 回调知晓推流是否成功。
如果希望看到自己的画面,可调用 startPreview 接口设置预览视图,并启动本地预览。
“streamID” 由您本地生成,但是需要保证:同一个 AppID 下,“streamID” 全局唯一。如果同一个 AppID 下,不同用户各推了一条 “streamID” 相同的流,会导致后推流的用户推流失败。
//进行预览和推流engine.startPreview(new ZegoCanvas(preview));//preview 为一个View 对象,开发者可以根据业务自定义,一般常用的是TextureView对象 engine.startPublishingStream("YOUR_STREAM_ID");//用户本端的StreamID
4.拉取音视频流4.1 拉取其他用户的音视频
进行视频通话时,我们需要拉取到其他用户的音视频。
onRoomStreamUpdate :在同一房间内的其他用户将音视频流推送到 ZEGO 音视频云时,我们会在此回调中收到音视频流新增的通知。
我们可以在该回调中,调用 startPlayingStream,传入 “streamID” 拉取播放该用户的音视频。您可通过监听 onPlayerStateUpdate 回调知晓是否成功拉取音视频。
4.2 展示用户进出房间的信息
onRoomUserUpdate 回调可以用于监听房间内的用户变化,房间内其他用户进入或退出都会触发该回调。
拉取音视频流示例代码如下:
engine.setEventHandler(new IZegoEventHandler() { @Override public void onRoomUserUpdate(String roomID, ZegoUpdateType updateType, ArrayList
提示
通过以上几个步骤可以快速实现多人视频通话功能。以上代码示例基于Android Java开发,更多详细步骤可以参考ZEGO开发者文档。