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语音聊天应用相关推荐

  1. 零基础搭建iOS语音聊天室平台源码

    语音聊天室平台源码玩法兴起,众多社交泛娱乐平台已纷纷跟进. 语音聊天室平台源码的实现,主要由业务系统和移动/Web 客户端组成.其中业务系统需要实现房间管理.麦位管理.音频流和麦位关联关系管理等功能, ...

  2. app后台运行会给服务器发信息吗_零基础搭建电视直播APP平台第一弹(支持安卓+电视盒子)...

    大家好 , 我是阿尘,欢迎来到:极梦小屋. 由于公众号改版,建议大家 星标置顶 本公众号,就可以第一时间接收到我们所推荐的精品资源啦! 为了大家更方便的交流和可以不错过每天的分享,所以特意建了一个交流 ...

  3. 最新最全vuepress零基础搭建(github搭建+新增插件)

    最新最全vuepress零基础搭建 标注:最终版以及修改最终都在www.javanode.cn是最终版本,在学习中需要修改的内容以及笔记全在这个网站,谢谢!有任何不妥的地方望纠正 看完了,发现对你有用 ...

  4. 【Workshshop No.3 | Kyligence X 青云QingCloud Workshop】零基础搭建云上大数据平台

    7月13日Kyligence 与青云QingCloud 联合举办的"零基础搭建云上大数据平台" Workshop诚邀您参加. Kyligence Cloud 是 Kyligence ...

  5. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  6. 局部配置和全局配置_06. 教你零基础搭建小程序(解读全局配置文件-tabBar字段)...

    自从开始在知乎上发教程后,发现一个事情啊, 大家对于我写的教程,都在偷偷地收藏~~ 但是, 却没有银点赞~ 知乎这个平台吧,点赞的分量比收藏更大, 这里也不是要赞(我知道自己还能做的更好), 只是希望 ...

  7. apk安装到电视上看不到图标_零基础搭建电视直播APP平台第二弹(修改APP)

    大家好 , 我是阿尘,欢迎来到:极梦小屋. 由于公众号改版,建议大家 星标置顶 本公众号,就可以第一时间接收到我们所推荐的精品资源啦! 为了大家更方便的交流和可以不错过每天的分享,所以特意建了一个交流 ...

  8. 零基础搭建获利的外卖cps平台公众号

    1 .前言 很多小伙伴想做外卖CPS赚钱,那给大家做一起超详细的外卖CPS教程.话不多说,直接上货 为什么说能赚钱?例如你有一千个好友(四,五个微信群),如果每个人一天吃一顿外卖20块,你拿5% 10 ...

  9. php 上传apk包到cdn_零基础搭建自己的博客网站和配置CDN设置wordpress篇

    零基础搭建自己的博客网站 博客类的建站程序有很多例如wordpress. typecho.zblog.emlog等等这几种是最常见的 平时我们用的见的更多的都是wordpress,因为wordpres ...

最新文章

  1. 启示录 产品经理 pdf_3个月,从公司前台转行互联网产品经理
  2. redhat 6.2安装telnet服务
  3. ABAP从数据库中删除行
  4. 【转】Asp.NET大文件上传开发总结(一)
  5. maven中pom文件解析
  6. UE4异步编程专题 - 多线程
  7. 数据结构 - 链表(双向链表学习)
  8. 电脑计算机程序员考证
  9. 如何清空matlab命令窗口,matlab如何清空命令窗口中的内容
  10. 手机android系统锁了怎么解,安卓手机解锁图案忘了怎么办?手机解锁密码忘了的解决办法...
  11. c语言printf的-是什么意思,c语言printf是什么意思
  12. handbrake中文版下载 | HandBrake(大菠萝视频格式转换器)官方中文版V1.3.3视频格式转换器哪个最好用
  13. 地下城与勇士正在自动连接频道服务器,DNF爆满频道服务器连接失败解决方法分享...
  14. python 计算物理_计算物理期末报告
  15. 2011年北邮各组组线
  16. 大概说一下ProFTPd配置参数。
  17. 阿里云轻量应用服务器Ubuntu20.04上手体验与基本配置(图形界面,ssh,代理等)
  18. PTA(十一)计算指数
  19. Microsoft Windows-关于“sfc/scannow”(立即扫描所有受保护的系统文件的命令)的一些问题
  20. 3款最好用的甘特图软件有哪些?

热门文章

  1. 网站通过nginx设置黑/白名单IP限制、国家城市IP访问限制
  2. 一种高效的q+1准均匀量化(quasi-uniform quantization)方法及MATLAB实现
  3. Android:修改电池容量
  4. 解决tomcat在pycharm中的初始化报错“ Failed to transfer file”“could not create folder”“(Permission denied)”
  5. 判断浏览器是否为ie8调样式
  6. Excel 模拟form表单提交
  7. 任务16:16_Flume案例_断点续传文件(案例测试)
  8. requests爬取豆瓣前250部高分电影
  9. WM_PIANT消息与窗口重画
  10. 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )