如何解决连接新设备后设备计数错误
我正在将 Agora 与 Unity 集成,我们有一个设备选择屏幕供用户在加入呼叫之前选择和测试他们的设备。 我遇到的问题是 Agora 没有在运行时相应地检测设备更改,这不会让我更新我的 UI 以反映这些更改。
void Start()
{
// get Agora engine,should be initialized already in the AgoraIOController component
agoraEngine = GetComponent<AgoraIOController>().GetAgoraEngine();
agoraEngine.OnAudioDeviceStateChanged += DeviceChangedHandler;
InitializeDeviceManager();
}
...
void DeviceChangedHandler(string deviceId,int deviceType,int deviceState)
{
devicesDirty = true;
onDevicesChanged.Invoke();
}
...
void RefreshDeviceList()
{
devices.Clear();
int audioDeviceCount = audioDeviceManager.GetAudioPlaybackDeviceCount();
if (audioDeviceCount == (int)ERROR_CODE.ERROR_NOT_INIT_ENGINE)
{
Debug.LogError("Agora engine not initialized,can't refresh devices");
return;
}
else if (audioDeviceCount < (int)ERROR_CODE.ERROR_OK)
{
Debug.LogError($"Unknown error while trying to get devices. Error code: {audioDeviceCount}");
return;
}
Debug.Log($"Found {audioDeviceCount} audio devices.");
for (int i = 0; i < audioDeviceCount; i++)
{
string deviceName = null;
string deviceId = null;
int result = audioDeviceManager.GetAudioPlaybackDevice(i,ref deviceName,ref deviceId);
if (result != (int)ERROR_CODE.ERROR_OK)
{
Debug.LogError("Error when trying to get audio device");
continue;
}
devices.Add(new AgoraDevice()
{
deviceId = deviceId,deviceName = deviceName,type = MEDIA_DEVICE_TYPE.AUDIO_RECORDING_DEVICE
});
}
}
如果我连接一个新麦克风并重新启动应用程序,它会按预期检测到,但是如果我在运行时连接一个新设备,我会收到 agoraEngine.OnAudioDeviceStateChanged
的事件,但是当我刷新设备列表时,设备计数并且设备信息没有更新,所以我的 UI 没有相应地显示新状态。
如果我有一个麦克风并连接第二个,或者如果我有两个麦克风但我断开其中一个,就会发生这种情况。在任何一种情况下,Agora 都不会在设备更改事件后反映这些更改。 我还尝试在下一帧中刷新设备列表,或者添加一个按钮来手动刷新列表,以检查 Agora 中是否有一些延迟来执行该更新,但它没有发生。 如果没有这个功能,我们的客户端就会有很多问题,在运行时连接新设备总是发生,我们需要使这个软件健壮并支持这些场景。 非常感谢任何帮助!
编辑:
释放并重新创建设备管理器有帮助,设备列表也更新了,但这看起来很奇怪,我不认为 API 应该这样使用。
void DeviceChangedHandler(string deviceId,int deviceState)
{
devicesDirty = true;
audioDeviceManager.ReleaseAAudioRecordingDeviceManager();
audioDeviceManager.CreateAAudioRecordingDeviceManager();
onDevicesChanged.Invoke();
}
解决方法
既然您正在使用麦克风插入/拔出进行测试,您是否打算在代码的第一部分中调用 AudioPlaybackDeviceManager 而不是 AudioRecordingDeviceManager?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。