tryHandleMicOccupyDuringScreenShare method
屏幕共享中第三方抢麦(1204/1205/1208)时:
- 不把麦标成永久不可用 / 不上报 busy(避免老师侧显示关麦)
- 标记中断并异步重建本地采集(defaultMode) 返回 true 表示已按共享场景处理,调用方应跳过常规错误上报。
Implementation
Future<bool> tryHandleMicOccupyDuringScreenShare(int code) async {
if (!Platform.isAndroid) {
return false;
}
if (!TRTC.isTemporaryMicOccupyCode(code)) {
return false;
}
if (!_trtcStreamInfoObs.isShareScreen.value) {
return false;
}
final micState = _membersInfoObs.selfMicState.value;
final selfMicOn = micState == StateStatusValueEnum.on;
// busy/fail 也视为「本应开麦但被占用」,停共享后要自动恢复。
final micShouldStayOn = selfMicOn ||
micState == StateStatusValueEnum.busy ||
micState == StateStatusValueEnum.fail ||
_pendingMicRestoreAfterScreenShare;
TRTC.isAudioCaptureInterrupted = true;
if (micShouldStayOn) {
_pendingMicRestoreAfterScreenShare = true;
}
TCICLog.warn(
"mic occupy during screen share code=$code micState=$micState "
"pendingRestore=$_pendingMicRestoreAfterScreenShare, "
"skip busy report and try recover",
actionModule: ActionModule.tcicController.name,
actionName: ActionName.startLocalAudio.name,
);
if (!_pendingMicRestoreAfterScreenShare) {
return true;
}
// 异步重试,不阻塞 TRTC 回调线程上的 UI 事件处理。
unawaited(_recoverMicAfterScreenShareOccupy(code));
return true;
}