语音和视频聊天,已成为社交软件的基础功能。在实时音视频技术支持下,社交APP延伸出了K歌语聊、语音电台、语音私聊等多样的玩法。此前,即构已推出语聊房一体化解决方案,帮助荔枝、喜马拉雅、酷狗、比心、Blued等多家社交APP实现产品功能升级。详细可查看:即构语聊房解决方案,让社交“有声”升级

为了构建更多的“语聊+场景”创新实践,即构在语聊房解决方案的基础上进行优化升级,推出语聊房场景的标准化封装SDK,平台只需简单编码即可实现语聊房核心功能。

基于服务多家头部语音社交平台的丰富经验,即构梳理了语聊房的标准架构和场景设计,通过对语聊房基础功能的解析,让客户对语聊房产品有进一步的了解。

 

场景核心概念解析

  • 语聊房(Chatroom)

语聊房是维护一组麦位状态信息的语音互动直播间。语聊房中的用户数不设上限,可以通过调用相关接口创建、加入、离开房间。加入房间将自动开始收听房间内的互动直播,并可以接收房间内的聊天消息。

 

  • 用户(User)

当前用户的信息,包含userID和userName两个字段,用于标识房间中的用户身份。每个用户都应具有唯一的userID,userName可以重复。

 

  • 麦位(ChatroomSeat)

麦位是语聊房内用户参与互动直播的媒介。麦位上的用户(上麦者)即可参与互动直播,而未在麦位上的用户(观众)只能收听互动直播。

麦位会及时同步给房间内的所有用户。

 

  • 麦位属性

麦位有三个属性,分别为状态(Status),用户(User),禁言标志位(Mute)。

麦位状态分为三种,分别是空状态、占用状态、关闭状态:

  1. 空状态(empty):当前麦位为空,用户可以进入该麦位加入互动直播。
  2. 占用状态(used):当前麦位已被用户占用,其他用户无法进入已被占用了的麦位。
  3. 关闭状态(closed):当前麦位已关闭,用户无法进入已被关闭的麦位。

当麦位为占用状态时,用户属性值为当前麦位上麦者的用户信息,否则属性为空。此外,麦位还有禁言标志位,若打开禁言,则该麦位上的上麦者将被禁止发言。

 

  • 麦位操作

用户需要对麦位执行麦位操作来修改麦位的状态,从而达到管理麦位的目的,麦位操作分为:

  1. 上麦(takeSeat):观众对一个空状态麦位执行上麦操作,将进入该麦位变为上麦者,麦位将由空状态变为占用状态。
  2. 下麦(leaveSeat):上麦者执行下麦操作,将离开对应麦位变为观众,对应麦位将由占用状态变为空状态。
  3. 换麦(changeSeat):上麦者执行换麦操作,将由当前麦位移动到换麦目标麦位,当前麦位将由占用状态变为空状态,目标麦位将由空状态变为占用状态。
  4. 抱用户上麦(pickUp):将指定观众抱上目标麦位,使其成为上麦者。
  5. 抱用户下麦(kickOut):将指定上麦者抱下麦位,使其成为观众。
  6. 禁麦/解麦(muteSeat):修改目标麦位禁言标志位,使得目标麦位上麦者(如果为占用状态)被禁言/解除禁言。
  7. 封麦/解封(closeSeat):修改目标麦位状态为关闭/空状态,执行封麦操作时如果目标麦位有上麦者,则会先将上麦者下麦,然后修改麦位状态位关闭状态。

 

功能设计

语聊房场景所需的功能如下:

  1. 多麦位语聊:房间内支持多人连麦及无限观众收听,并将麦位状态同步给房间内所有用户。
  2. 自定义房间配置:房间参数可以按需配置,如码率、麦位数等
  3. 背景音乐、音效播放:背景音乐与音效的播放互不干扰,背景音乐提供播放、暂停、歌曲列表、上一首、下一首、设置播放模式(单曲/循环/随机)、SEEK等常用功能。
  4. Mic开关、外放开关、输入输出音量控制
  5. 后台程序:程序切换到后台仍然可以保持正常通话功能
  6. IM:支持发送IM消息
  7. 音效设置:变声、立体声、混响等音效设置,并提供耳返试听。

 

场景架构

语聊房场景架构设计图如下:

  • 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已上线,点击【这里】可查看 详细的集成文档。

Logo

致力于链接即构和开发者,提供实时互动和元宇宙领域的前沿洞察、技术分享和丰富的开发者活动,共建实时互动世界。

更多推荐