iOS端Agora Voice Unity SDK退出频道后AVAudioSession失效致游戏音效异常
解决Agora Voice Unity SDK退出频道后iOS游戏音效失效问题
核心原因
退出频道时Agora SDK会主动停用系统的AVAudioSession,且停用前未完全停止音频I/O操作,导致游戏后续的音频播放会话无法正常工作,对应控制台日志:
2023-08-04 01:03:29.359231-0700 AgoraVoicetest[1362:131944] [avas] AVAudioSession_iOS.mm:1271 Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
单独调用DisableAudio()无法阻止SDK对音频会话的修改,需要调整退出流程或修改SDK配置。
解决方案
1. 调整退出频道的操作顺序
在调用LeaveChannel()前,先停止所有音频相关操作,确保SDK不会带着活跃的音频I/O去停用会话:
// 1. 停止本地音频流发送 mRtcEngine.MuteLocalAudioStream(true); // 2. 如果使用了音频混音,停止混音 mRtcEngine.StopAudioMixing(); // 3. 禁用SDK音频模块 mRtcEngine.DisableAudio(); // 4. 延迟片刻后退出频道(确保音频操作完全停止) yield return new WaitForSeconds(0.1f); mRtcEngine.LeaveChannel();
2. 退出后手动重新激活AVAudioSession
在LeaveChannel()完成的回调中,主动重新激活系统音频会话,恢复游戏音频播放能力:
public void OnLeaveChannel(RtcStats stats) { #if UNITY_IOS && !UNITY_EDITOR // 重新激活iOS音频会话 UnityEngine.iOS.AudioSession.SetActive(true); #endif }
3. 禁止SDK自动管理音频会话(推荐)
初始化Agora引擎时,配置参数让SDK不修改系统音频会话,完全由游戏自己管理:
RtcEngineConfig config = new RtcEngineConfig(); // 设置SDK不修改音频会话 config.audioSessionOperationRestriction = AudioSessionOperationRestriction.DoNotModify; // 初始化引擎 IRtcEngine mRtcEngine = RtcEngine.Create(config);
这种方式下,需要游戏自己处理:
- 加入频道前调用
UnityEngine.iOS.AudioSession.SetActive(true)激活会话 - 退出频道后保持会话激活,确保游戏音效正常
内容的提问来源于stack exchange,提问作者Atif Raheem
相关产品推荐
相关产品推荐

