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

Unity3d 连接新设备后设备计数错误,unity3d,agora.io,Unity3d,Agora.io,我将Agora与Unity集成在一起,我们有一个设备选择屏幕,用户可以在加入通话之前选择和测试他们的设备。 我遇到的问题是Agora没有在运行时检测到相应的设备更改,这不允许我更新UI以反映这些更改 void Start() { // get Agora engine, should be initialized already in the AgoraIOController component agoraEngine = GetComponent<AgoraIOCont

我将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
        });
    }

}


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

void DeviceChangedHandler(string deviceId, int deviceType, int deviceState)
{
    devicesDirty = true;
    audioDeviceManager.ReleaseAAudioRecordingDeviceManager();
    audioDeviceManager.CreateAAudioRecordingDeviceManager();
    onDevicesChanged.Invoke();     
}