使用MediaDevices.enumerateDevices()监视更改

时间:2018-06-05 07:17:01

标签: javascript

我目前有一种连续轮询MediaDevices.enumerateDevices()的方法,它会返回一系列已连接的媒体设备。

let devices = [];

function getDevices() {
    return new Promise(async (resolve, reject) => {
        try {
            const devices = await navigator.mediaDevices.enumerateDevices();
            resolve(devices);
        } catch (err) {
            reject(err);
        }
    });
}

async function listenForDeviceChanges() {
    devices = await getDevices();
    setTimeout(listenForDeviceChanges, 500);
}


(async () => {
    await listenForDeviceChanges();
})();

这似乎效率低下,所以我想知道在MediaDevices API中是否还有另一种方法可以做到这一点?特别是某种“观察者”方法。

1 个答案:

答案 0 :(得分:1)

是的,有devicechange事件:

  

只要用户代理可用的媒体设备集以及扩展到网站或应用的媒体设备集发生了变化,就会发生这种情况

     

- https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/ondevicechange

E.g。

navigator.mediaDevices.ondevicechange = function(event) {
  devices = await getDevices();
};