You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:10:09