1 语聊房应用场景说明

七夕礼物准备好了吗?程序猿七夕礼物标配,给女友搭建专属语聊房,既浪漫又硬核!

语聊房在社交场景中使用比较广泛,社交APP中的语聊房场景的实现,主要由业务系统和移动/Web 客户端组成。其中业务系统需要实现语聊房的房间管理、麦位管理、音频流和麦位关联关系管理等功能,客户端需要实现语聊房的登录/登出房间、拉流/停止拉流、上麦推流/停止推流下麦等功能,还可以根据需要使用语聊房房间信息通道实现 IM 功能。

1.1 语聊房业务系统功能

语聊房房间管理

主要负责房间列表的维护。

  • 创建房间:用户登录业务系统后,可以创建房间,创建房间后房间列表要做新增操作。
  • 销毁房间:所有用户退出房间后,需要销毁房间,销毁房间后房间列表要做删除操作。

语聊房麦位管理

主要负责根据业务场景定义房间的麦位数量,以及当前房间所有麦位的状态管理。

  • 用户进入房间后,只有空闲状态的麦位可以上麦。
  • 用户上麦后,需要修改麦位状态为非空闲状态。
  • 用户停止推流下麦后,要重置麦位状态。

语聊房音频流管理

主要负责管理房间内音频流和麦位的关联关系。

  • 只有当前房间内非空闲状态麦位的流可以拉。

1.2 语聊房客户端功能

语聊房登录/登出房间

  • 用户进入客户端后,选择房间列表中的房间或者自行创建房间,然后登录房间。
  • 用户退出当前语聊房时,需要登出房间。

语聊房拉流/停止拉流

  • 用户登录房间后或收到流新增消息时,需要根据流 Id 判断是否是本房间非空闲状态麦位推的流,如果是则发起拉流。
  • 用户收到流删除消息或者登出房间之前,要停止拉流。

语聊房SDK上麦推流/停止推流下麦

  • 用户登录房间后,如果有非空闲状态的麦位,可以选择上麦。
  • 用户上麦成功发起推流,成为麦上用户。
  • 用户停止推流后下麦,成为观众。

语聊房房间信令互动

  • 用户可以通过房间信令通道,发送文字消息参与互动。

2 使用ZEGO SDK语聊房实现流程

下图为语聊房实现时序图,开发者可以参考时序图来实现该业务。

2.1 用户 A 创建房间

调用业务系统创建房间接口创建房间,创建房间成功后业务系统需要返回的当前创建房间的 ID。

2.2 用户 A 登录业务房间

调用业务系统登录房间接口登录房间,登录成功后业务系统需要更新房间列表,并返回房间麦位信息列表,麦位信息需要包含麦位 Id、是否空闲状态等。

2.3 用户 B 查询房间列表

调用业务系统获取房间列表信息接口获取房间列表,调用成功后业务系统需要返回当前房间信息列表,房间信息需要包含房间 ID 等。

2.4 用户 B 登录业务房间

用业务系统登录房间接口登录房间,登录成功后业务系统需要更新房间列表,并返回房间麦位信息列表,麦位信息需要包含麦位 Id、是否空闲状态等。

2.5 用户 A 登录 SDK 房间

依次调用 Express Audio SDK 的初始化 SDK 接口、设置事件回调接口、登录房间接口,登录 SDK 房间,登录成功后,会收到房间流更新回调。

2.6 用户 A 上麦推流

选择空闲状态的麦位调用业务系统上麦接口上麦,业务系统更新麦位状态为非空闲状态,并返回上麦结果信息,上麦结果信息需要包含使用的麦位 Id、为麦位分配的推流 Id 等信息。收到请求上麦结果返回数据后,根据返回的推流 ID 调用 Express Audio SDK 推流接口开始推流,推流后会收到推流结果回调。

2.7 用户 B 登录 SDK 房间

依次调用 Express Audio SDK 的初始化 SDK 接口、设置事件回调接口、登录房间接口,登录 SDK 房间,登录成功后,会收到房间流更新回调。

2.8 用户 B 收到 Express Audio SDK 流更新回调拉流

登录 SDK 房间成功后,会收到房间流更新回调,如果是流新增,调用业务系统查询接口查询流 ID 是否为当前房间麦位分配的推流 ID,如果是则调用 Express Audio SDK 拉流接口拉流。

2.9 用户 B 上麦推流

选择空闲状态的麦位调用业务系统上麦接口上麦,业务系统更新麦位状态为非空闲状态,并返回上麦结果信息,上麦结果信息需要包含使用的麦位 Id、为麦位分配的推流 Id 等信息。收到请求上麦结果返回数据后,根据返回的推流 ID 调用 Express Audio SDK 推流接口开始推流,推流后会收到推流结果回调。

2.10 用户 A 收到 Express Audio SDK 流更新回调拉流

登录 SDK 房间成功后,会收到房间流更新回调,如果是流新增,调用业务系统查询接口查询流 ID 是否为当前房间麦位分配的推流 ID,如果是则调用 Express Audio SDK 拉流接口拉流。

2.11 用户 A 请求下麦后停止推流

调用业务系统下麦接口下麦,业务系统更新麦位为空闲状态,用户下麦成功后成为线下观众,停止推流。

2.12 停止拉流、登出房间

调用 Express Audio SDK 停止拉流接口停止拉所有正在拉的流、调用登出房间接口登出 SDK 房间。

2.13 登出业务房间

调用业务系统登出房间接口登出业务房间。

3 语聊房SDK操作步骤

3.1 创建/销毁 Engine

在使用 Express Audio SDK 之前,需要初始化 Express Audio SDK。由于初始化操作 SDK 内部处理的流程较多,建议开发者在 App 启动时进行,详情请参考 快速开始 - 实现流程 的 “2.1 创建引擎”。

/** 定义 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);
/** 销毁 SDK */
ZegoExpressEngine.destroyEngine(null);

3.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.3 登录/登出语聊房房间

用户上麦推流之前,需要先登录房间,在收到登录房间成功的回调后可以直接调用 loginRoom 接口进行推拉流操作,详情请参考 快速开始 - 实现流程 的 “2.2 登录房间”。

/** 创建用户 */
ZegoUser user = new ZegoUser("Anchor1");/** 开始登陆房间 */
engine.loginRoom("LiveRoom", user);
/** 登出房间 */
engine.logoutRoom("room1");

3.4 语聊房开始/停止推流

调用 startPublishingStream 接口,可以向远端用户发送本端的音视频流。如果不需要继续推流,请调用 stopPublishingStream 停止推流,详情请参考 快速开始 - 实现流程 的 “2.3 推流”。

/** 开始推流 */
engine.startPublishingStream("stream1");
/** 停止推流 */
engine.stopPublishingStream();

3.5 语聊房拉流/停止拉流

调用 startPlayingStream 进行拉流,如果不需要继续拉流,请调用 stopPlayingStream 停止拉流,详情请参考 快速开始 - 实现流程 的 “2.4 拉流”。

/***  开始拉流*/
engine.startPlayingStream("stream1");
/** 停止拉流 */
engine.stopPlayingStream(streamID);

获取语聊房SDK更多帮助

你学会了吗?

获取本文语聊房的Demo、开发文档、技术支持,访问即构文档中心

近期有开发规划的开发者可上即构官网查看,恰逢即构七周年全线音视频产品1折的优惠,联系商务获取RTC产品优惠;

程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房相关推荐

  1. 程序员是怎么快速搭建专属语聊房的

    1 语聊房应用场景说明 七夕礼物准备好了吗?程序猿七夕礼物标配,给女友搭建专属语聊房,既浪漫又硬核! 语聊房在社交场景中使用比较广泛,社交APP中的语聊房场景的实现,主要由业务系统和移动/Web 客户 ...

  2. 程序员的硬核浪漫 — 女友专属语聊房(内附源码)

    人人都说找个程序猿做男朋友就是好,钱多话少 over 早. 额...估计小编把文章发布出去后就要被公司的程序猿同胞们疯狂逮捕挨打了. 虽然日常生活中大家对程序猿的标签大多是呆板.木讷.不懂浪漫,格子衫 ...

  3. 30分钟(零成本)快速搭建markdown个人github博客

    零成本-30分钟快速搭建markdown个人github博客 摘要:本文以mkdocs 开源文档工具 + markdown预发编写文档,最终生成简易个人github博客.最终效果如:https://s ...

  4. 如何 30 分钟搭建语聊房

    一个拥有 1-2 年经验的开发者,从 0 到 1 上线应用只要 7 天.一个刚起步的程序员,可以 30 分钟内完成一个 Demo. 这不是天方夜谭,而是融云场景化 SDK 带给行业的创变.[关注 融云 ...

  5. 告别后端!阿里云小程序 Serverless 教你如何 30 分钟开发小程序!

    CSDN摄于云栖大会 整理 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 2018 年 9 月 12 日,支付宝小程序正式上线.仅仅过去一年时间,支付宝小程序发展飞速:月活跃用户数突破5亿 ...

  6. 【微信小程序项目实践总结】30分钟从陌生到熟悉

    前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05-日历组件的实现 4. 微信小程序开发04-打造自 ...

  7. 《重学 Java 面试题》PDF 出炉了 - 退休的程序猿,肝了30天写出15万字241页的实战编程资料

    一.前言 我膨胀了 ,在编写完上一本PDF<字节码编程>被下载了2000份以后,蠢蠢欲动开始计划第二本.于是从 5月20日那天投身实战型设计模式打磨,通过模拟互联网业务开发实际需求作为学习 ...

  8. 五分钟用Docker快速搭建Go开发环境

    挺早以前在我写过一篇用 Docker搭建LNMP开发环境的文章:用Docker搭建Laravel开发环境,里面详细介绍了将 nginx. mysql和 php三个容器用 docker-compose编 ...

  9. 小红书 程序员七夕礼物 - 微信每日早安推送 简单部署一键启动

    更新:仓库wechat-push中介绍一种无需服务器的部署方式,注册使用码云流水线自动发送消息.没有服务器不会编程的小伙伴,推荐大家使用这种方式. 本文来自 小红书大佬七夕节的礼物 原版大佬的代码,配 ...

最新文章

  1. 使用随机森林(Random Forest)进行特征筛选并可视化
  2. 4.QT4中的connect的实现
  3. WIN7上VM中的LINUX如何设置上网
  4. 制作五彩纸屑转场动效_何时以及如何将五彩纸屑添加到产品UI
  5. 苹果六电池_【行业分析】特斯拉“电池日”前夕供应链个股备受关注 溶剂龙头石大胜华DMC等需求量有望大增...
  6. AN EMPIRICAL STUDY OF EXAMPLE FORGETTING DURING DEEP NEURAL NETWORK LEARNING 论文笔记
  7. 组合与继承c++_组合与继承
  8. java 类的对象是什么意思_java中类和对象的概念
  9. 美服lol服务器状态,LOL美服训练模式上线:炮塔可关闭 野区无限刷新
  10. Rosalind第83题:Inferring Genotype from a Pedigree
  11. 2022-2027年中国民办高校行业市场全景评估及发展战略规划报告
  12. 北伦敦德比桑切斯为枪手扳平比分
  13. 网页flv视频播放代码
  14. 软件测试常用linux命令
  15. 模型高性能优化 | 两步数据预处理让Alphafold 提速一倍
  16. 实验二 XML之数学公式和化学分子式
  17. 标注2.0:数据标注员如何进行从业选择?
  18. 阿里P9架构师终于把毕生心血而成的分布式高可用算法笔记开源了
  19. 什么是域名DNS?有什么用途?
  20. 进入BIOS的方法之一

热门文章

  1. 不是东北人,累死念不出来
  2. Alexa排名的常识
  3. mysql touches_touches - 缘起缘落 - OSCHINA - 中文开源技术交流社区
  4. flutter: Skipped 32 frames! The application may be doing too much work on its main thread.
  5. Linux登陆苹果M1芯片
  6. SpringBootAdmin 显示offline
  7. 2015-8英语总结
  8. Winget、Scoop 和 Chocolatey 安装位置更改方法
  9. 独家 | 大数据与AI技术助力金融科技:百融金服的探索实例
  10. 断言(assert)