Javascript navigator.mediaDevices.ondevicechange在使用音频插孔时不工作
我正在尝试使用MediaDevice API响应设备更改事件,如下所示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
_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%确定流部分。