Files
peko-ios/micButton状态表格.md

3.3 KiB
Raw Blame History

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 麦克风开启 显示开麦图标

关键时序和同步机制

状态更新流程

用户操作 → StageView处理 → 麦位队列更新 → onMicroQueueUpdate回调 
→ XPRoomViewController分发 → XPRoomMenuContainerView更新 
→ micButton状态/显示更新 → recheckMicState同步检查

重要同步点

时机 同步操作 目的
viewWillAppear recheckMicState 确保UI与全局状态一致
房间退出 micState = MICState_None 重置状态
麦位变化 onMicroQueueUpdate 实时更新UI

特殊情况处理

特殊情况 micButton行为 处理逻辑
网络断线重连 重新同步状态 recheckMicState确保一致性
被踢出麦位 立即隐藏 NIMChatroomEventTypeKicked触发
房间模式切换 根据新模式调整 不同RoomModeType有不同处理
禁麦状态 显示但可能限制功能 isNoProhibitMic控制

总结: micButton的可用状态主要取决于用户是否在麦位(isOnMic)在麦位时根据MICState显示不同状态用户只有在MICState_Open时才能说话。