Unity3D Windows端使用Agora SDK枚举麦克风接口报错如何解决
问题根因
你遇到的两个返回值对应Agora SDK的标准错误码:
-10000000:对应ERR_NOT_READY,即音频设备模块未完成初始化就调用了设备操作接口-2:对应ERR_INVALID_ARGUMENT,由于第一步未获取到合法的设备总数,传入的设备索引无效,自然无法返回设备名称和ID
正确实现流程
不要在RTC引擎刚初始化完成时立刻调用设备管理接口,按以下步骤实现:
- 完成RTC引擎初始化后,首先调用
mRtcEngine.EnableAudio()显式开启音频模块,底层音频设备枚举是异步过程,需等待100-300ms再执行后续设备操作 - 等待完成后获取音频录制设备管理实例,再执行设备枚举、选择操作
可直接参考以下可运行代码:
using System.Collections; using System.Collections.Generic; using Agora.Rtc; using UnityEngine; public class AgoraMicManager : MonoBehaviour { private IRtcEngine mRtcEngine; // 初始化RTC引擎完成后调用该方法 public void StartMicEnum() { // 必须显式开启音频模块,否则底层不会加载音频设备管理能力 mRtcEngine.EnableAudio(); StartCoroutine(EnumAndSetMicrophone()); } private IEnumerator EnumAndSetMicrophone() { // 等待底层完成音频设备初始化,可根据设备性能调整等待时长 yield return new WaitForSeconds(0.2f); IAudioRecordingDeviceManager recordingManager = mRtcEngine.GetAudioRecordingDeviceManager(); if (recordingManager == null) { Debug.LogError("recordingManager is null!"); yield break; } int deviceCount = recordingManager.GetAudioRecordingDeviceCount(); // 正常逻辑下deviceCount应大于0,若仍返回负错误码,参考后续踩坑点排查 if (deviceCount <= 0) { Debug.LogError($"Get mic count failed, code: {deviceCount}"); yield break; } List<string> micNameList = new List<string>(); List<string> micIdList = new List<string>(); for (int i = 0; i < deviceCount; i++) { string deviceName = ""; string deviceId = ""; int ret = recordingManager.GetAudioRecordingDeviceInfo(i, ref deviceName, ref deviceId); if (ret == 0) { micNameList.Add(deviceName); micIdList.Add(deviceId); Debug.Log($"Mic index:{i}, name:{deviceName}, id:{deviceId}"); } } // 选择指定麦克风,传入对应设备的deviceId即可,频道内调用也可实时生效 int targetMicIndex = 0; // 替换为需要选中的麦克风索引 int setRet = recordingManager.SetAudioRecordingDevice(micIdList[targetMicIndex]); if (setRet == 0) { Debug.Log($"Switch mic success, current mic: {micNameList[targetMicIndex]}"); } } }
常见踩坑排查点
- 不要在Unity Editor模式下验证设备枚举逻辑,编辑器环境下SDK音频模块和Windows独立构建版行为不一致,必须打Windows Standalone包测试
- 检查系统麦克风权限:Windows 10/11需在「设置-隐私和安全性-麦克风」中开启「允许桌面应用访问麦克风」开关,否则SDK无法读取设备列表
- 若设备安装了虚拟声卡、音频变声类软件并开启了麦克风独占模式,会导致SDK无法访问音频设备,暂时关闭这类软件后重试
- 确认使用的是Agora 4.x正式版SDK,预览版存在设备管理接口初始化时序bug,会固定返回-10000000错误码
- 若需要实时监听设备插拔事件,可在拿到
recordingManager实例后注册OnAudioRecordingDeviceStateChanged回调,动态更新设备列表即可
内容的提问来源于stack exchange,提问作者Leonardo Benini
相关产品推荐
相关产品推荐

