连接新设备后设备计数错误

Posted

技术标签:

【中文标题】连接新设备后设备计数错误【英文标题】:Wrong device count after connecting a new device 【发布时间】:2021-05-26 15:58:27 【问题描述】:

我正在将 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 的事件,但是当我刷新设备列表时,设备计数和设备info 没有更新,所以我的 UI 没有相应地显示新状态。

如果我有一个麦克风并且我连接了第二个,或者如果我有两个麦克风并且我断开了一个,就会发生这种情况。在任何一种情况下,Agora 都不会在设备更改事件后反映这些更改。 我还尝试在下一帧中刷新设备列表,或者添加一个手动刷新列表的按钮,以检查 Agora 中是否有延迟执行该更新,但没有发生。 如果没有这个功能,我们将在客户端遇到很多问题,在运行时连接新设备总是会发生,我们需要使这个软件变得健壮并支持这些场景。 非常感谢任何帮助!

编辑:

释放并重新创建设备管理器有帮助,设备列表也更新了,但这看起来很奇怪,我认为API不应该这样使用。

void DeviceChangedHandler(string deviceId, int deviceType, int deviceState)

    devicesDirty = true;
    audioDeviceManager.ReleaseAAudioRecordingDeviceManager();
    audioDeviceManager.CreateAAudioRecordingDeviceManager();
    onDevicesChanged.Invoke();     

【问题讨论】:

【参考方案1】:

由于您正在使用麦克风插拔测试,您是否打算在代码的第一部分调用 AudioPlaybackDeviceManager 而不是 AudioRecordingDeviceManager?

【讨论】:

以上是关于连接新设备后设备计数错误的主要内容,如果未能解决你的问题,请参考以下文章

单击“显示已连接的设备”后,Provisioning Server Console中的超时错误

移动设备(iOS 和 Android)的 Google 分析会话计数错误

重启后Windows10互联网连接问题。未找到硬件设备连接

尝试与此设备通信时遇到错误

VMWare 12虚拟机启动过程中提示“虚拟设备ide0:1无法连接”错误的解决办法

Appium ADB 错误:当设备通过端口 5555 上的 tcpip 连接时,获取设备平台版本时出错