麦位管理
更新时间: 2025/03/04 10:14:43
网易云信房间组件(NERoom)的麦位管理功能包括:上麦、下麦、抱麦、踢麦等。在语聊房、K 歌、直播等场景中,主播和观众连麦是非常热门的玩法。通过多人实时互动,可以活跃房间氛围、激发观众参与热情,进而提升产品活跃度。
注意事项
- 您可以在创建房间时,设置麦位相关的初始化配置,包括麦位数量和麦位申请审批模式,具体请参考 创建房间。
- 目前只支持在创建房间时设置麦位数量,麦位数量最大为 20,在房间正常使用过程中无法修改麦位数量。
添加麦位事件监听
主播和观众进入房间后,监听麦位相关的事件(NESeatEventListener
)。
示例代码如下:
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
/**
* addSeatEventListener,示例 2 个监听回调函数,其他更多监听回调请参考接口文档
*/
NERoomSeatController.addSeatEventListener({
onSeatManagerAdded: (managers) => {
},
onSeatManagerRemoved: (managers) => {
}
})
主播邀请观众上麦(抱麦)
API 调用时序
sequenceDiagram
actor hostClientA as 主播 A client
participant NERoom as NERoom
actor audienceB as 观众 B client
note over NERoom : 抱观众上麦
hostClientA ->> NERoom : 邀请上麦<br>sendSeatInvitation
NERoom ->> audienceB : 自动同意上麦&麦位变更的回调<br>onSeatInvitationAccepted&onSeatListChanged
NERoom ->> hostClientA : 自动同意上麦&麦位变更的回调<br>onSeatInvitationAccepted&onSeatListChanged
audienceB ->> audienceB : 刷新 UI
hostClientA ->> hostClientA : 刷新 UI
实现方法
-
主播调用
sendSeatInvitation
接口邀请观众上麦。参数 类型 描述 seatIndex number 麦位位置。
麦位的最大数量可以在 创建房间 时设置。user string 待邀请的观众的用户 ID。 exclusive boolean 是否独占麦位。如果为 true(独占模式),则在管理员处理该请求之前,其他人无法申请该麦位。 -
(可选)观众调用
acceptSeatInvitation
接口同意上麦邀请,或调用rejectSeatInvitation
接口拒绝上麦邀请。 -
触发同意上麦的回调
onSeatInvitationAccepted
和麦位变更的回调onSeatListChanged
。 -
房间内所有成员收到回调后,刷新麦位展示的 UI。
示例代码
主播邀请观众上麦的示例代码如下:
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
const userId = '56789';
NERoomSeatController.sendSeatInvitation(undefined, undefined, userId)
主播邀请观众上麦时指定麦位的示例代码如下:
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
const seartIndex = 2;
const userId = '56789';
NERoomSeatController.sendSeatInvitation(seartIndex, undefined, userId)
观众申请上麦
API 调用时序
sequenceDiagram
actor hostClientA as 主播 A client
participant NERoom as NERoom
actor audienceB as 观众 B client
note over NERoom : 观众申请上麦
audienceB ->> NERoom : 申请上麦<br>submitSeatRequest
NERoom ->> hostClientA : 观众 B 申请上麦的回调<br>onSeatRequestSubmitted
hostClientA ->> hostClientA : 刷新 UI
alt 主播同意上麦申请
hostClientA ->> NERoom : 主播同意上麦申请<br>approveSeatRequest
NERoom ->> hostClientA : 主播同意上麦申请&麦位变更的回调<br>onSeatRequestApproved&onSeatListChanged
NERoom ->> audienceB : 主播同意上麦申请&麦位变更的回调<br>onSeatRequestApproved&onSeatListChanged
audienceB ->> audienceB : 刷新 UI
hostClientA ->> hostClientA : 刷新 UI
else 主播拒绝上麦申请
hostClientA ->> NERoom : 主播不同意上麦申请<br>rejectSeatRequest
NERoom ->> hostClientA : 主播拒绝观众 B 上麦的回调<br>onSeatRequestRejected
NERoom ->> audienceB : 主播拒绝观众 B 上麦的回调<br>onSeatRequestRejected
audienceB ->> audienceB : 刷新 UI
hostClientA ->> hostClientA : 刷新 UI
end
实现方法
-
观众 B 调用
submitSeatRequest
接口申请上麦。参数 类型 描述 seatIndex number 指定上麦后的麦位位置。
该参数为可选,如果不传该参数,则自动占用当前空的麦位中的第一个。
麦位的最大数量可以在 创建房间 时设置。exclusive boolean 是否独占麦位。如果为 true(独占模式),则在管理员处理该请求之前,其他人无法申请该麦位。 ext string 扩展字段。 -
主播收到观众 B 申请上麦的回调
onSeatRequestSubmitted
。 -
主播同意或拒绝观众 B 上麦。
-
主播调用
approveSeatRequest
接口同意观众 B 上麦。 -
主播调用
rejectSeatRequest
接口拒绝观众 B 上麦。
-
-
观众 B 收到主播同意上麦申请的回调
onSeatRequestApproved
或主播拒绝上麦申请的回调onSeatRequestRejected
。
示例代码
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
//观众申请上麦时不指定麦位
NERoomSeatController.submitSeatRequest()
//观众申请上麦时指定麦位
const seatIndex = 2
NERoomSeatController.submitSeatRequest(seatIndex)
// userId 通过 onSeatRequestSubmitted 获取
const userId = "222"
//主播同意上麦申请
NERoomSeatController.approveSeatRequest(userId)
// 主播拒绝上麦申请
NERoomSeatController.rejectSeatRequest(userId)
主播将观众移出麦位(踢麦)
API 调用时序
sequenceDiagram
actor hostClientA as 主播 A client
participant NERoom as NERoom
actor audienceB as 观众 B client
note over NERoom : 将观众移出麦位
hostClientA ->> NERoom : 主播踢观众 B 下麦<br>kickSeat
NERoom ->> audienceB : 主播踢观众 B 下麦&麦位变更的回调<br>onSeatKicked&onSeatListChanged
NERoom ->> hostClientA : 主播踢观众 B 下麦&麦位变更的回调<br>onSeatKicked&onSeatListChanged
audienceB ->> audienceB : 刷新 UI
hostClientA ->> hostClientA : 刷新 UI
实现方法
-
主播调用
kickSeat
接口将观众移出麦位。参数 类型 描述 user String 待移出麦位的观众的用户 ID。 -
房间内所有成员会收到主播将观众移出麦位的回调
onSeatKicked
和麦位变更的回调onSeatListChanged
。
示例代码
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
const userId = '5678'
NERoomSeatController.kickSeat(userId)
观众取消申请上麦
API 调用时序
sequenceDiagram
actor hostClientA as 主播 A client
participant NERoom as NERoom
actor audienceB as 观众 B client
note over NERoom : 观众取消申请上麦
audienceB ->> NERoom : 取消申请上麦<br>cancelSeatRequest
NERoom ->> hostClientA : 观众 B 取消上麦的回调<br>onSeatRequestCancelled
NERoom ->> audienceB : 观众 B 取消上麦的回调<br>onSeatRequestCancelled
audienceB ->> audienceB : 刷新 UI
hostClientA ->> hostClientA : 刷新 UI
实现方法
-
观众调用
cancelSeatRequest
接口取消申请上麦。 -
取消申请上麦后,主播收到观众取消上麦申请的回调
onSeatRequestCancelled
。
示例代码
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
NERoomSeatController.cancelSeatRequest()
观众主动下麦
API 调用时序
sequenceDiagram
actor hostClientA as 主播 A client
participant NERoom as NERoom
actor audienceB as 观众 B client
note over NERoom : 观众主动下麦
audienceB ->> NERoom : 下麦<br>leaveSeat
NERoom ->> hostClientA : 观众 B 成功下麦&麦位变更的回调<br>onSeatLeave&onSeatListChanged
NERoom ->> audienceB : 观众 B 成功下麦&麦位变更的回调<br>onSeatLeave&onSeatListChanged
audienceB ->> audienceB : 刷新 UI
hostClientA ->> hostClientA : 刷新 UI
实现方法
-
观众调用
leaveSeat
接口下麦。 -
下麦成功后,房间内所有成员收到观众成功下麦的回调
onSeatLeave
和麦位变更的回调onSeatListChanged
。
示例代码
JavaScript/**
* 获取房间上下文 NERoomContext
* @param roomUuid 房间 ID
*/
const NERoomContext = NERoomService.getRoomContext(roomUuid)
/**
* 获取 seatController
*/
const NERoomSeatController = NERoomContext.seatController
NERoomSeatController.leaveSeat()
相关错误码
错误码 | 错误码描述 |
---|---|
1302 | 麦位已打开 |
1303 | 观众已申请上麦 |
1304 | 观众未申请上麦 |
1305 | 麦位已被其他观众占位 |
1306 | 观众已在麦上 |
1307 | 麦序未初始化 |
1308 | 麦序已初始化 |
1309 | 主播未将观众抱上麦 |
1310 | 麦位已关闭 |
1311 | 麦位都已被占,没有可用的麦位 |
1312 | 观众已被抱麦,无法再次被抱麦 |
1313 | 观众未在麦位上 |
1314 | 麦位数量不能超过 20 个 |