micButton 状态表格
micButton 可用状态总览
场景 |
用户状态 |
micButton显示 |
micButton可用性 |
micState值 |
音频状态 |
备注 |
用户上麦前 |
未在麦位 |
隐藏 |
不可用 |
MICState_None |
无音频 |
isOnMic = NO |
用户刚上麦 |
刚上麦位 |
显示 |
可用 |
MICState_Close |
静音 |
默认静音状态,localMuted = YES |
用户开麦 |
在麦位 |
显示开麦状态 |
可用 |
MICState_Open |
开启音频 |
用户可以说话 |
用户关麦 |
在麦位 |
显示关麦状态 |
可用 |
MICState_Close |
静音 |
用户无法说话 |
用户下麦 |
离开麦位 |
隐藏 |
不可用 |
MICState_None |
无音频 |
isOnMic = NO |
不同场景下的状态变化
1. 用户加入/离开舞台
操作 |
micButton状态变化 |
音频状态变化 |
UI更新 |
用户上麦 |
隐藏 → 显示(关麦状态) |
无音频 → 静音 |
isOnMic: NO → YES |
用户下麦 |
显示 → 隐藏 |
当前状态 → 无音频 |
isOnMic: YES → NO |
2. 其他用户加入/离开舞台
操作 |
当前用户micButton |
影响范围 |
说明 |
他人上麦 |
无变化 |
仅更新麦位显示 |
micButton状态不受影响 |
他人下麦 |
无变化 |
仅更新麦位显示 |
micButton状态不受影响 |
3. 房间最小化场景
状态 |
micButton处理 |
音频处理 |
数据同步 |
最小化时 |
监听队列变化 |
继续广播音频 |
selfNeedBroadcast基于MicroMicStateType_Open |
恢复显示 |
recheckMicState同步 |
保持当前状态 |
从XPSkillCardPlayerManager.micState同步 |
micButton 状态枚举详解
MICState枚举 |
数值 |
含义 |
UI表现 |
用户能否说话 |
MICState_None |
0 |
无麦克风状态 |
micButton隐藏 |
❌ 否 |
MICState_Close |
1 |
麦克风关闭 |
显示关麦图标 |
❌ 否 |
MICState_Open |
2 |
麦克风开启 |
显示开麦图标 |
✅ 是 |
关键时序和同步机制
状态更新流程
重要同步点
时机 |
同步操作 |
目的 |
viewWillAppear |
recheckMicState |
确保UI与全局状态一致 |
房间退出 |
micState = MICState_None |
重置状态 |
麦位变化 |
onMicroQueueUpdate |
实时更新UI |
特殊情况处理
特殊情况 |
micButton行为 |
处理逻辑 |
网络断线重连 |
重新同步状态 |
recheckMicState确保一致性 |
被踢出麦位 |
立即隐藏 |
NIMChatroomEventTypeKicked触发 |
房间模式切换 |
根据新模式调整 |
不同RoomModeType有不同处理 |
禁麦状态 |
显示但可能限制功能 |
isNoProhibitMic控制 |
总结: micButton的可用状态主要取决于用户是否在麦位(isOnMic),在麦位时根据MICState显示不同状态,用户只有在MICState_Open时才能说话。