模拟navigator.mediaDevices.enumerateDevices

时间:2017-02-25 23:15:43

标签: javascript google-chrome browser google-chrome-extension pulseaudio

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

我注意到该网络应用正在使用navigator.mediaDevices.enumerateDevices来确定我是否安装了正确的设备以进行通话。有什么方法可以模仿它来返回有效的MediaDeviceInfo对象,以欺骗网站认为我有一个有效的麦克风,所以我可以保持通话?

与重复答案有关的编辑

我认为我不能覆盖navigator.enumerateDevices = function(){...}

返回值是MediaDeviceInfo对象的列表,您无法使用MediaDeviceInfo构造函数创建这些对象。但我很想知道是否有人知道如何创建某种响应数组,以满足页面上已解决的承诺的任何消费者。

2 个答案:

答案 0 :(得分:1)

navigator.mediaDevices.enumerateDevices返回承诺。尝试以下代码段。您可以添加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])})
}

答案 1 :(得分:0)

您可以尝试以下操作:

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