Javascript navigator.mediaDevices.ondevicechange在使用音频插孔时不工作

Javascript navigator.mediaDevices.ondevicechange在使用音频插孔时不工作,javascript,web-audio-api,navigator,mediadevices,Javascript,Web Audio Api,Navigator,Mediadevices,我正在尝试使用MediaDevice API响应设备更改事件,如下所示 _trackDeviceChange: function () { var e = this navigator.mediaDevices.ondevicechange = function () { navigator.mediaDevices.enumerateDevices().then(function (n) { e.get('allVid

我正在尝试使用MediaDevice API响应设备更改事件,如下所示

_trackDeviceChange: function () {
        var e = this
        navigator.mediaDevices.ondevicechange = function () {
          navigator.mediaDevices.enumerateDevices().then(function (n) {
            e.get('allVideoSourceDevices').clear(),
            e.get('allAudioSourceDevices').clear(),
            e.get('allVideoSourceDevices').pushObjects(t.default.filter(n, [
              'kind',
              'videoinput'
            ])), e.get('allAudioSourceDevices').pushObjects(t.default.filter(n, [
              'kind',
              'audioinput'
            ])), e.get('videoSourceDevice') && !t.default.find(n, {
              deviceId: e.get('videoSourceDevice.deviceId'),
              kind: 'videoinput',
              label: e.get('videoSourceDevice.label')
            }) ? e.set('deviceNotFound', 'camera')  : e.get('audioSourceDevice') && !t.default.find(n, {
              deviceId: e.get('audioSourceDevice.deviceId'),
              kind: 'audioinput',
              label: e.get('audioSourceDevice.label')
            }) && e.set('deviceNotFound', 'microphone')
          })
        }
      }


它仅适用于USB设备,不适用于3.5m插孔

我认为问题在于,
devicechange
事件仅在设备集更改时触发

从技术上讲,当您连接或断开迷你插孔时,情况并非如此,因此不会触发
devicechange
事件。无论是否连接电缆,设备都是设备集的一部分


但是,当您通过USB连接设备时,设备集确实会发生变化,并且会添加一个以前不可用的新设备,因此会触发
devicechange
事件。

您的想法是正确的。我用很多设备进行了测试。即使使用蓝牙设备。它还为蓝牙设备启动。然后我浏览了大多数存在这种功能的库。无论在哪里都是一样的。然后我得出结论,
mediaDevice
只将mini-jack视为内置设备。它不会被认为是一个外部设备。好的方面是,流不会中断。我在流部分可能是错的,因为我听到一个问题,音频无法用于录制的视频。根本原因仍未调试。如果问题发生在静音音频输入设置或任何其他方式,而不是设备更改,那么我100%确定流部分。