使用ZEGO SDK零基础搭建Android语音聊天应用
2021年初,Clubhouse引爆了在线语音聊天应用,字节跳动、小米、快手、映客等国内泛娱乐社交厂商已纷纷跟进,那么搭建一个类Clubhouse的语音聊天软件难吗?
其实Clubhouse的技术原理非常简单,就是实时语音通话+麦位管理。ZEGO即构科技所的语音聊天方案就完整的提供了上述功能,目前即构提供了体验Demo及源码,让你可以零基础快速搭建一个语音聊天软件。
下面先来看看Android语音聊天应用的搭建流程:
一、功能说明
语音聊天房应用的实现,主要由业务系统和移动/Web 客户端组成。其中业务系统需要实现房间管理、麦位管理、音频流和麦位关联关系管理等功能,客户端需要实现登录/登出房间、拉流/停止拉流、上麦推流/停止推流下麦等功能,还可以根据需要使用房间信息通道实现 IM 功能。
1、业务系统功能
房间管理
主要负责房间列表的维护。
创建房间:用户登录业务系统后,可以创建房间,创建房间后房间列表要做新增操作。
销毁房间:所有用户退出房间后,需要销毁房间,销毁房间后房间列表要做删除操作。
麦位管理
主要负责根据业务场景定义房间的麦位数量,以及当前房间所有麦位的状态管理。
用户进入房间后,只有空闲状态的麦位可以上麦。
用户上麦后,需要修改麦位状态为非空闲状态。
用户停止推流下麦后,要重置麦位状态。
音频流管理
主要负责管理房间内音频流和麦位的关联关系。
只有当前房间内非空闲状态麦位的流可以拉。
2、客户端功能
登录/登出房间
用户进入客户端后,选择房间列表中的房间或者自行创建房间,然后登录房间。
用户退出当前语聊房时,需要登出房间。
拉流/停止拉流
用户登录房间后或收到流新增消息时,需要根据流 Id 判断是否是本房间非空闲状态麦位推的流,如果是则发起拉流。
用户收到流删除消息或者登出房间之前,要停止拉流。
上麦推流/停止推流下麦
用户登录房间后,如果有非空闲状态的麦位,可以选择上麦。
用户上麦成功发起推流,成为麦上用户。
用户停止推流后下麦,成为观众。
房间信令互动
用户可以通过房间信令通道,发送文字消息参与互动。
二、实现流程
以下为语音聊天房的实现时序图,你可以参考时序图来实现。
- 用户 A 创建房间
调用业务系统创建房间接口创建房间,创建房间成功后业务系统需要返回的当前创建房间的 ID。
- 用户 A 登录业务房间
调用业务系统登录房间接口登录房间,登录成功后业务系统需要更新房间列表,并返回房间麦位信息列表,麦位信息需要包含麦位 Id、是否空闲状态等。
- 用户 B 查询房间列表
调用业务系统获取房间列表信息接口获取房间列表,调用成功后业务系统需要返回当前房间信息列表,房间信息需要包含房间 ID 等。
- 用户 B 登录业务房间
用业务系统登录房间接口登录房间,登录成功后业务系统需要更新房间列表,并返回房间麦位信息列表,麦位信息需要包含麦位 Id、是否空闲状态等。
- 用户 A 登录 SDK 房间
依次调用 Express Audio SDK 的初始化 SDK 接口、设置事件回调接口、登录房间接口,登录 SDK 房间,登录成功后,会收到房间流更新回调。
- 用户 A 上麦推流
选择空闲状态的麦位调用业务系统上麦接口上麦,业务系统更新麦位状态为非空闲状态,并返回上麦结果信息,上麦结果信息需要包含使用的麦位 Id、为麦位分配的推流 Id 等信息。收到请求上麦结果返回数据后,根据返回的推流 ID 调用 Express Audio SDK 推流接口开始推流,推流后会收到推流结果回调。
- 用户 B 登录 SDK 房间
依次调用 Express Audio SDK 的初始化 SDK 接口、设置事件回调接口、登录房间接口,登录 SDK 房间,登录成功后,会收到房间流更新回调。
- 用户 B 收到 Express Audio SDK 流更新回调拉流
登录 SDK 房间成功后,会收到房间流更新回调,如果是流新增,调用业务系统查询接口查询流 ID 是否为当前房间麦位分配的推流 ID,如果是则调用 Express Audio SDK 拉流接口拉流。
- 用户 B 上麦推流
选择空闲状态的麦位调用业务系统上麦接口上麦,业务系统更新麦位状态为非空闲状态,并返回上麦结果信息,上麦结果信息需要包含使用的麦位 Id、为麦位分配的推流 Id 等信息。收到请求上麦结果返回数据后,根据返回的推流 ID 调用 Express Audio SDK 推流接口开始推流,推流后会收到推流结果回调。
- 用户 A 收到 Express Audio SDK 流更新回调拉流
登录 SDK 房间成功后,会收到房间流更新回调,如果是流新增,调用业务系统查询接口查询流 ID 是否为当前房间麦位分配的推流 ID,如果是则调用 Express Audio SDK 拉流接口拉流。
- 用户 A 请求下麦后停止推流
调用业务系统下麦接口下麦,业务系统更新麦位为空闲状态,用户下麦成功后成为线下观众,停止推流。
- 停止拉流、登出房间
调用 Express Audio SDK 停止拉流接口停止拉所有正在拉的流、调用登出房间接口登出 SDK 房间。
- 登出业务房间
调用业务系统登出房间接口登出业务房间。
三、操作步骤
1、创建/销毁 Engine
在使用 Express Audio SDK 之前,需要初始化 Express Audio SDK。由于初始化操作 SDK 内部处理的流程较多,建议开发者在 App 启动时进行,详情请参考 快速开始 - 实现流程 的 “2.1 创建引擎”。
/** 定义 SDK 引擎对象 */
ZegoExpressEngine engine;
/** 填写 appID 和 appSign */
long appID = ; // 请通过官网注册获取,格式为 123456789L
String appSign = ; //64个字符,请通过官网注册获取,格式为"0123456789012345678901234567890123456789012345678901234567890123"
/** 初始化SDK,使用测试环境,通用场景接入 */
engine = ZegoExpressEngine.createEngine(appID, appSign, true, ZegoScenario.GENERAL, getApplication(), null);
/** 销毁 SDK */
ZegoExpressEngine.destroyEngine(null);
2、设置事件回调
可以根据场景需要,在初始化 SDK 后监听想要关注的事件通知,比如用户加入房间,房间流更新等等。
// 设置事件回调,监听房间流更新
engine.setEventHandler(new IZegoEventHandler() {@Overridepublic void onRoomStreamUpdate(String roomID, ZegoUpdateType updateType, ArrayList<ZegoStream> streamList) {super.onRoomStreamUpdate(roomID, updateType, streamList);if (ZegoUpdateType.ADD == updateType) {// 流新增} else if (ZegoUpdateType.DELETE == updateType) {// 流删除}}
});
3、登录/登出房间
用户上麦推流之前,需要先登录房间,在收到登录房间成功的回调后可以直接调用 loginRoom 接口进行推拉流操作,详情请参考 快速开始 - 实现流程 的 “2.2 登录房间”。
/** 创建用户 */
ZegoUser user = new ZegoUser("Anchor1");
/** 开始登陆房间 */
engine.loginRoom("LiveRoom", user);
/** 登出房间 */
engine.logoutRoom("room1");
4、开始/停止推流
调用 startPublishingStream 接口,可以向远端用户发送本端的音视频流。如果不需要继续推流,请调用 stopPublishingStream 停止推流,详情请参考 快速开始 - 实现流程 的 “2.3 推流”。
/** 开始推流 */
engine.startPublishingStream("stream1");
/** 停止推流 */
engine.stopPublishingStream();
5、拉流/停止拉流
调用 startPlayingStream 进行拉流,如果不需要继续拉流,请调用 stopPlayingStream 停止拉流,详情请参考 快速开始 - 实现流程 的 “2.4 拉流”。
/*** 开始拉流*/
engine.startPlayingStream("stream1");
/** 停止拉流 */
engine.stopPlayingStream(streamID);
以上就是基于ZEGO SDK 实现Android语音聊天应用的流程,即构还提供了免费源码,让开发实现2小时快速集成上线,扫码即可体验Demo,欢迎进入 ZEGO官网 获取源码。
使用ZEGO SDK零基础搭建Android语音聊天应用相关推荐
- 零基础搭建iOS语音聊天室平台源码
语音聊天室平台源码玩法兴起,众多社交泛娱乐平台已纷纷跟进. 语音聊天室平台源码的实现,主要由业务系统和移动/Web 客户端组成.其中业务系统需要实现房间管理.麦位管理.音频流和麦位关联关系管理等功能, ...
- app后台运行会给服务器发信息吗_零基础搭建电视直播APP平台第一弹(支持安卓+电视盒子)...
大家好 , 我是阿尘,欢迎来到:极梦小屋. 由于公众号改版,建议大家 星标置顶 本公众号,就可以第一时间接收到我们所推荐的精品资源啦! 为了大家更方便的交流和可以不错过每天的分享,所以特意建了一个交流 ...
- 最新最全vuepress零基础搭建(github搭建+新增插件)
最新最全vuepress零基础搭建 标注:最终版以及修改最终都在www.javanode.cn是最终版本,在学习中需要修改的内容以及笔记全在这个网站,谢谢!有任何不妥的地方望纠正 看完了,发现对你有用 ...
- 【Workshshop No.3 | Kyligence X 青云QingCloud Workshop】零基础搭建云上大数据平台
7月13日Kyligence 与青云QingCloud 联合举办的"零基础搭建云上大数据平台" Workshop诚邀您参加. Kyligence Cloud 是 Kyligence ...
- 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...
- 局部配置和全局配置_06. 教你零基础搭建小程序(解读全局配置文件-tabBar字段)...
自从开始在知乎上发教程后,发现一个事情啊, 大家对于我写的教程,都在偷偷地收藏~~ 但是, 却没有银点赞~ 知乎这个平台吧,点赞的分量比收藏更大, 这里也不是要赞(我知道自己还能做的更好), 只是希望 ...
- apk安装到电视上看不到图标_零基础搭建电视直播APP平台第二弹(修改APP)
大家好 , 我是阿尘,欢迎来到:极梦小屋. 由于公众号改版,建议大家 星标置顶 本公众号,就可以第一时间接收到我们所推荐的精品资源啦! 为了大家更方便的交流和可以不错过每天的分享,所以特意建了一个交流 ...
- 零基础搭建获利的外卖cps平台公众号
1 .前言 很多小伙伴想做外卖CPS赚钱,那给大家做一起超详细的外卖CPS教程.话不多说,直接上货 为什么说能赚钱?例如你有一千个好友(四,五个微信群),如果每个人一天吃一顿外卖20块,你拿5% 10 ...
- php 上传apk包到cdn_零基础搭建自己的博客网站和配置CDN设置wordpress篇
零基础搭建自己的博客网站 博客类的建站程序有很多例如wordpress. typecho.zblog.emlog等等这几种是最常见的 平时我们用的见的更多的都是wordpress,因为wordpres ...
最新文章
- 启示录 产品经理 pdf_3个月,从公司前台转行互联网产品经理
- redhat 6.2安装telnet服务
- ABAP从数据库中删除行
- 【转】Asp.NET大文件上传开发总结(一)
- maven中pom文件解析
- UE4异步编程专题 - 多线程
- 数据结构 - 链表(双向链表学习)
- 电脑计算机程序员考证
- 如何清空matlab命令窗口,matlab如何清空命令窗口中的内容
- 手机android系统锁了怎么解,安卓手机解锁图案忘了怎么办?手机解锁密码忘了的解决办法...
- c语言printf的-是什么意思,c语言printf是什么意思
- handbrake中文版下载 | HandBrake(大菠萝视频格式转换器)官方中文版V1.3.3视频格式转换器哪个最好用
- 地下城与勇士正在自动连接频道服务器,DNF爆满频道服务器连接失败解决方法分享...
- python 计算物理_计算物理期末报告
- 2011年北邮各组组线
- 大概说一下ProFTPd配置参数。
- 阿里云轻量应用服务器Ubuntu20.04上手体验与基本配置(图形界面,ssh,代理等)
- PTA(十一)计算指数
- Microsoft Windows-关于“sfc/scannow”(立即扫描所有受保护的系统文件的命令)的一些问题
- 3款最好用的甘特图软件有哪些?
热门文章
- 网站通过nginx设置黑/白名单IP限制、国家城市IP访问限制
- 一种高效的q+1准均匀量化(quasi-uniform quantization)方法及MATLAB实现
- Android:修改电池容量
- 解决tomcat在pycharm中的初始化报错“ Failed to transfer file”“could not create folder”“(Permission denied)”
- 判断浏览器是否为ie8调样式
- Excel 模拟form表单提交
- 任务16:16_Flume案例_断点续传文件(案例测试)
- requests爬取豆瓣前250部高分电影
- WM_PIANT消息与窗口重画
- 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )