文章目录

  • 前言
  • 一、前提条件
  • 二、示例源码下载
  • 三、使用步骤
    • 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 实现多人视频通话,流程图如下:

1. 创建引擎

定义 SDK 引擎对象,调用 createEngine 接口,将申请到的 AppID 和 AppSign 传入参数 “appID” 和 “appSign”,创建引擎单例对象。

如果需要注册回调代理,可将实现了 IZegoEventHandler 的对象传入参数 “eventHandler”。如果不需要注册回调代理,可将 “null” 传入参数 “eventHandler”,创建引擎后仍需要注册回调时可通过调用 setEventHandler 接口设置回调代理。

代码如下(示例):

/** 定义 SDK 引擎对象 */
ZegoExpressEngine engine;ZegoEngineProfile profile = new ZegoEngineProfile();
/** 请通过官网注册获取,格式为 123456789L */
profile.appID = appID;
/** 64个字符,请通过官网注册获取,格式为"0123456789012345678901234567890123456789012345678901234567890123" */
profile.appSign = appSign;
/** 通用场景接入 */
profile.scenario = ZegoScenario.GENERAL;
/** 设置app的application 对象 */
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() {@Overridepublic void onRoomUserUpdate(String roomID, ZegoUpdateType updateType, ArrayList<ZegoUser> userList) {super.onRoomUserUpdate(roomID, updateType, userList);//房间用户变化回调,本示例是以toast为展示示例,实际业务流程需开发者按需设计if(updateType == ZegoUpdateType.ADD){// 当 “updateType” 为 “ZegoUpdateTypeADD” 时,用户可以拉取 userList 里的用户进行处理for(ZegoUser user : userList){//进行Toast展示Toast.makeText(myActivity,user.userID+"加入房间",Toast.LENGTH_SHORT).show();//myActivity为一个content对象,若在activity中可使用该Activity为参数}}else{// 当 “updateType” 为 “ZegoUpdateTypeDelete” 时,用户可以拉取 userList 里的用户进行处理for(ZegoUser user : userList){//进行Toast展示Toast.makeText(myActivity,user.userID+"加入房间",Toast.LENGTH_SHORT).show();//myActivity为一个content对象,若在activity中可使用该Activity为参数}}}@Overridepublic void onRoomStateUpdate(String roomID, ZegoRoomState state, int errorCode, JSONObject extendedData) {//房间状态回调super.onRoomStateUpdate(roomID, state, errorCode, extendedData);if(state == ZegoRoomState.CONNECTED){//可以根据实际业务进行设计}}@Overridepublic void onRoomStreamUpdate(String roomID, ZegoUpdateTypeupdateType, ArrayList< ZegoStream > streamList, JSONObject extendedData) {// 流变化回调super.onRoomStreamUpdate(roomID, updateType, streamList, extendedData);// 在这里更新 UI 或执行其他操作if(updateType == ZegoUpdateType.ADD){// 当 “updateType” 为 “ZegoUpdateTypeADD” 时,用户可以拉取 streamList 里各条音视频流以展示房间内其他用户的画面和声音for(ZegoStream stream : streamList){//进行拉流,preview 为一个View 对象,开发者可以根据业务自定义,一般常用的是TextureView对象;在展示多人视频的时候,开发者需要使用不同的 View 承载不同音视频流的画面,保证不同用户的视频不会重叠在一起;此处的示例代码会覆盖当前正在拉流的画面engine.startPlayingStream( stream.streamID,new ZegoCanvas(preview));}}else{// 当 “updateType” 为 “ZegoUpdateTypeDELETE” 时,用户可以停止拉取相应的音视频流for(ZegoStream stream : streamList){//停止拉流engine.stopPlayingStream( stream.streamID);}}}});

API 调用时序图参考


提示

通过以上几个步骤可以快速实现多人视频通话功能。以上代码示例基于Android Java开发,更多详细步骤可以参考ZEGO开发者文档。

基于ZEGO SDK实现多人视频通话功能相关推荐

  1. 基于声网 Flutter SDK 实现多人视频通话

    前言 本文是由声网社区的开发者"小猿"撰写的Flutter基础教程系列中的第一篇.本文除了讲述实现多人视频通话的过程,还有一些 Flutter 开发方面的知识点.该系列将基于声网 ...

  2. 如何基于 ZEGO SDK 实现 Windows 一对一音视频聊天应用

    互联网发展至今,实时视频和语音通话越来越被大众所依赖. 今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣的小伙 ...

  3. 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用

    之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...

  4. 如何基于 ZEGO SDK 实现 Android 通话质量监测

    功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 参考 下载示例源码 获取源码. 相关源码请查看 &qu ...

  5. 如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用

    疫情期间,很多线下活动转为线上举行,实时音视频的需求剧增,在视频会议,在线教育,电商购物等众多场景成了"生活新常态". 本文将教你如何通过即构ZEGO sdk在Android端搭建 ...

  6. 如何基于Zego sdk实现复杂网络服务高可用?

    以短视频.直播为代表的音视频互动,正成为互联网主流的交互方式.拿直播举例,它从一种娱乐形式,逐渐融合于教育.娱乐.电商.旅游等多种生态中.未来,直播还将成为像水.电一样的基础设施. 然而,仅仅可进行音 ...

  7. 基于 ZEGO SDK 实现 iOS 一对一音视频聊天应用

    1 准备环境 在开始集成 ZEGO Express SDK 前,请确保开发环境满足以下要求: Xcode 12.0 或以上版本. iOS 9.0 或以上版本且支持音视频的 iOS 设备. iOS 设备 ...

  8. 如何基于 ZEGO SDK 实现 Web 基本消息收发

    即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务. 实时聊天交互功能是市面上主流APP的重要功能之一,人们所熟悉的就是微信,QQ的聊天消息系统,IM看似简单,技术开发 ...

  9. java 微博sdk_Java基于新浪微博SDK实现发微博的功能

    背景 最近用实现了一个简单的发微博的功能. 新浪微博的SDK已经经历了多次更新,而网上的资料.教程大多还是基于旧版本的,很多细节上有了一些变化.本文将基于最新的新浪微博SDK介绍发微博的过程. 简介 ...

  10. 在线K歌如何基于zego sdk实现音视频社交玩法

    无处不在的在线K歌. 在线K歌一直是泛娱乐领域的热门赛道,艾媒咨询最新数据表示,2021年中国在线K歌用户规模约为5.1亿人,渗透率约为49.7%,这意味着每两个网民中,就有一个体验过在线K歌. 尽管 ...

最新文章

  1. location.hash属性介绍
  2. 全球最优秀的14位程序员
  3. 使用Spring Cloud HystrixCommands的功能Hystrix
  4. 禁用计算机f1-f12,win10禁用F1至F12热键转为功能键的技巧
  5. c语言中数组结尾的0的作用,C语言里面一个数组最后的\0表示什么意思?
  6. css 浮动 相对定位 绝对定位区别
  7. java多脚本顺序运行_关于eclipse里运行selenium脚本的顺序问题
  8. Yarn 和 NPM 国内快速镜像(淘宝镜像)
  9. C语言和Python语言有什么区别呢?
  10. 2022最新Nodejs下载安装配置步骤(保姆级教程)
  11. beautiful report 的简单使用
  12. FastStone注册码
  13. c语言中使用的字符常量其起止标记符是,2021国家开放大学电大本科《C语言程序设计》期末试题及答案(试卷号:1253)...
  14. 武林外传挂机宝宝 v1.0 怎么用
  15. Android.AsyncTask
  16. 交易时间与开盘价确定
  17. 英雄联盟LPL比赛数据可视化详细教程,可视化的魅力,你值得拥有!!!
  18. 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
  19. Android 11 + 使用阿里“金融级实人认证方案”闪退
  20. 2021年五大进销存软件排名,助力门店精细化管理必看

热门文章

  1. turicreate 视频_iOS 推出的turiCreate功能(一) 图片识别
  2. codeforces 724F. Uniformly Branched Trees
  3. TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁
  4. 基于C++的深度学习模型部署
  5. dark lust百度云 shell_Girlvania summer_lust+Expansion_Pack-LegsFeet.zip
  6. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定的解决办法
  7. Torch 论文复现:卷积注意力模块 CBAM
  8. 【BZOJ1112】砖块Klo
  9. cannot allocate memory in static TLS block问题记录
  10. 倒计时c#/unity