当前位置:网站首页>程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房
程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房
2022-08-04 11:59:00 【ZEGO即构开发者】
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() {
@Override
public 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产品优惠;
边栏推荐
猜你喜欢
[Flight Control Development Advanced Course 7] Crazy Shell Open Source Formation UAV - Formation Flight
Zikko launches new Thunderbolt 4 docking station with both HDMI2.1 and 2.5GbE
The use of DDR3 (Naive) in Xilinx VIVADO (3) simulation test
微信公众号之底部菜单
使用Stream多年,collect还有这些“骚操作”?
正则表达式
监督和半监督学习下的多标签分类综述
JS逆向字体反爬,某供应商平台反爬实践
HyperLynx仿真(一)LineSim简单介绍
shell之循环语句(for、while、until)
随机推荐
独立站卖家如何使用 WhatsApp Business API 建立有意义的客户关系?
A Survey of Multi-Label Classification under Supervised and Semi-Supervised Learning
BOSS直聘回应女大学生连遭两次性骚扰:高度重视求职者安全 可通过App等举报
Redis (1) installation and configuration
【HMS core】【FAQ】Account Kit、MDM能力、push Kit典型问题合集6
WPF 截图控件之画笔(八)「仿微信」
The use of DDR3 (Naive) in Xilinx VIVADO (2) Read and write design
力扣解法汇总1403-非递增顺序的最小子序列
使用json-server快速搭建本地数据接口
今天15:00 | CVPR 2022 论文分享精彩继续
Redis(一)安装与配置
Move the blog to CSDN
【地平线旭日X3派试用体验】从开机到点灯(第一节)
如何做好企业数字化转型?这10份靠谱案例收藏了(附下载)
飞书更新招聘功能 候选人可选择面试时间
Rust 从入门到精通04-变量
电源测试之输出动态响应(Output Dynamic Response Test)
UMA&港理工&阿里提出SP-ViT,为视觉Transformer学习2D空间先验知识!
涨姿势了!原来这才是多线程正确实现方式
MOSFET米勒平台(Miller Plateau)