1

我正在尝试使用 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')
          })
        }
      }

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

4

1 回答 1

1

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

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

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

于 2020-03-07T21:20:12.273 回答