即构多人语音聊天室功能解析及搭建方法
语音和视频聊天,已成为社交软件的基础功能。在实时音视频技术支持下,社交APP延伸出了K歌语聊、语音电台、语音私聊等多样的玩法。此前,即构已推出语聊房一体化解决方案,帮助荔枝、喜马拉雅、酷狗、比心、Blued等多家社交APP实现产品功能升级。详细可查看:即构语聊房解决方案,让社交“有声”升级。
为了构建更多的“语聊+场景”创新实践,即构在语聊房解决方案的基础上进行优化升级,推出语聊房场景的标准化封装SDK,平台只需简单编码即可实现语聊房核心功能。
基于服务多家头部语音社交平台的丰富经验,即构梳理了语聊房的标准架构和场景设计,通过对语聊房基础功能的解析,让客户对语聊房产品有进一步的了解。
场景核心概念解析
语聊房(Chatroom)
语聊房是维护一组麦位状态信息的语音互动直播间。语聊房中的用户数不设上限,可以通过调用相关接口创建、加入、离开房间。加入房间将自动开始收听房间内的互动直播,并可以接收房间内的聊天消息。
用户(User)
当前用户的信息,包含userID和userName两个字段,用于标识房间中的用户身份。每个用户都应具有唯一的userID,userName可以重复。
麦位(ChatroomSeat)
麦位是语聊房内用户参与互动直播的媒介。麦位上的用户(上麦者)即可参与互动直播,而未在麦位上的用户(观众)只能收听互动直播。
麦位会及时同步给房间内的所有用户。
麦位属性
麦位有三个属性,分别为状态(Status),用户(User),禁言标志位(Mute)。
麦位状态分为三种,分别是空状态、占用状态、关闭状态:
空状态(empty):当前麦位为空,用户可以进入该麦位加入互动直播。
占用状态(used):当前麦位已被用户占用,其他用户无法进入已被占用了的麦位。
关闭状态(closed):当前麦位已关闭,用户无法进入已被关闭的麦位。
当麦位为占用状态时,用户属性值为当前麦位上麦者的用户信息,否则属性为空。此外,麦位还有禁言标志位,若打开禁言,则该麦位上的上麦者将被禁止发言。
麦位操作
用户需要对麦位执行麦位操作来修改麦位的状态,从而达到管理麦位的目的,麦位操作分为:
上麦(takeSeat):观众对一个空状态麦位执行上麦操作,将进入该麦位变为上麦者,麦位将由空状态变为占用状态。
下麦(leaveSeat):上麦者执行下麦操作,将离开对应麦位变为观众,对应麦位将由占用状态变为空状态。
换麦(changeSeat):上麦者执行换麦操作,将由当前麦位移动到换麦目标麦位,当前麦位将由占用状态变为空状态,目标麦位将由空状态变为占用状态。
抱用户上麦(pickUp):将指定观众抱上目标麦位,使其成为上麦者。
抱用户下麦(kickOut):将指定上麦者抱下麦位,使其成为观众。
禁麦/解麦(muteSeat):修改目标麦位禁言标志位,使得目标麦位上麦者(如果为占用状态)被禁言/解除禁言。
封麦/解封(closeSeat):修改目标麦位状态为关闭/空状态,执行封麦操作时如果目标麦位有上麦者,则会先将上麦者下麦,然后修改麦位状态位关闭状态。
功能设计
语聊房场景所需的功能如下:
多麦位语聊:房间内支持多人连麦及无限观众收听,并将麦位状态同步给房间内所有用户。
自定义房间配置:房间参数可以按需配置,如码率、麦位数等
背景音乐、音效播放:背景音乐与音效的播放互不干扰,背景音乐提供播放、暂停、歌曲列表、上一首、下一首、设置播放模式(单曲/循环/随机)、SEEK等常用功能。
Mic开关、外放开关、输入输出音量控制
后台程序:程序切换到后台仍然可以保持正常通话功能
IM:支持发送IM消息
音效设置:变声、立体声、混响等音效设置,并提供耳返试听。
场景架构
语聊房场景架构设计图如下:
ZegoRoomManager负责房间登录、状态管理
ZegoStateSyncManager负责麦位状态信息同步及修改
ZegoMusicPlayer负责背景音乐及音效的管理控制
ZegoChatroom负责麦位操作管理、判定,以及协调以上各模块的运转,并向外暴露接口
语聊房场景简要搭建流程
1)主播简要流程示例:
初始化
创建加入房间
执行麦位操作
离开房间
// Step1.初始化
[ZegoChatroom setAppID:YourAppID appSignature:YourAppSignature user:user];
// Step2.创建并加入房间
[ZegoChatroom.shared createRoomWithRoomID:@"roomID"
roomName:@"roomName"
seatCount:9
liveConfig:nil];
// Step3.待登录成功即可执行麦位操作
// 执行上麦操作,将进入该麦位变为上麦者,上麦后房间内的成员即可听到上麦者的声音
[ZegoChatroom.shared takeSeatAtIndex:0 completion:^(NSError * _Nullable error) {
//do something...
}];
...
// 执行下麦操作,将离开对应麦位变为观众,上麦者在下麦后房间内的成员就无法听到其声音
[ZegoChatroom.shared leaveSeatWithCompletion:^(NSError * _Nullable error) {
//do something...
}];
// Step4.离开房间
[ZegoChatroom.sharedChatroom leaveRoom];
2)观众简要流程示例:
初始化
创建并加入房间
执行麦位操作(略)
离开房间
// Step1.初始化
[ZegoChatroom setAppID:YourAppID appSignature:YourAppSignature user:user];
// Step2.加入现有房间,如果房主已在上麦,则进入房间就可以听见房主的声音
[ZegoChatroom.shared joinRoom:roomID liveConfig:nil];
// Step3.待登录成功即可执行麦位操作
...
// Step4.离开房间
[ZegoChatroom.shared leaveRoom];
具体调用时序图
MusicPlayer
即构的语聊房场景SDK还封装了zegomusicplayer,用于语聊房的背景音乐、音效播放(音乐、音效播放互不冲突),并提供了歌曲列表管理以及播放控制等功能。
语音聊天场景中,用户主要通过语音来互动,因为对音质的体验更敏感。即构通过抖动缓冲、前向纠错等技术对抗弱网络的延迟,保障语音通话的低延迟和高音质。
即构语聊房SDK包含了多人语聊的众多基础功能,基于即构SDK开发者可实现快速的接入集成,构建多样化的语聊房产品。目前即构语聊房SDK已上线,点击【这里】可查看 详细的集成文档。