模拟 navigator.mediaDevices.enumerateDevices

Mock navigator.mediaDevices.enumerateDevices

我想进行 WebRTC 通话并听到声音,即使我的设备没有连接麦克风。我用来加入 VOIP 通话的网络应用程序检测到我没有麦克风并关闭了我的音频,因为它假设我想拨入。

我注意到网络应用程序正在使用 navigator.mediaDevices.enumerateDevices 来确定我是否安装了正确的设备以进行通话。有什么方法可以将其模拟为 return 有效的 MediaDeviceInfo 对象,以欺骗网站认为我有一个有效的麦克风,这样我就可以继续通话了?

编辑与重复答案相关的内容

我不认为我可以直接覆盖 navigator.enumerateDevices = function(){...}

return 值是 MediaDeviceInfo 对象的列表,您不能使用 MediaDeviceInfo 构造函数创建它。但我很想知道是否有人知道一种方法来创建某种响应数组来满足页面上已解决承诺的任何消费者。

您可以尝试这样的操作:

var device1 = {
    deviceId: "default",
    kind: "audiooutput",
    label: "",
    groupId: "default"
}
device1.__proto__ = MediaDeviceInfo.prototype; 
navigator.mediaDevices.enumerateDevices = function() { 
    return [device1]
}

navigator.mediaDevices.enumerateDevicesreturns答应。试试下面的片段。您可以添加 n 个设备。

var device1 = {
    deviceId: "default",
    kind: "audiooutput",
    label: "",
    groupId: "default"
}
device1.__proto__ = MediaDeviceInfo.prototype;
navigator.mediaDevices.enumerateDevices = function() { 
    return new Promise((res, rej)=>{res([device1])})
}