getUserMedia() 不能正常工作 chrome 但在启动 pwa-chrome 时可以

getUserMedia() not working in normal chrome but does when launching pwa-chrome

在有人评论 getUserMedia 必须通过本地或 https 之前,我知道,我的网站是 https,当我通过本地主机启动时,我使用 VSCode @ 端口 5500 的实时服务器插件启动。

我的问题是,我正在使用 getUserMedia() 获取用户麦克风的实时更新,并将其传递到我的程序中以执行操作。在我的 'launch.json' 我有这个

{
    "name": "Launch Chrome",
    "request": "launch",
    "type": "pwa-chrome",
    "url": "http://127.0.0.1:5500",
    "webRoot": "${workspaceFolder}"
}

这很好用。但是,如果我将 'type' 更改为 'chrome',即

{
    "name": "Launch Chrome",
    "request": "launch",
    "type": "chrome",
    "url": "http://127.0.0.1:5500",
    "webRoot": "${workspaceFolder}"
}

尽管 chrome 页面显示“此网站正在使用您的麦克风”,但该代码不再有效,程序也未拾取我的麦克风。通知。

这意味着当需要将此站点放到我的实际网站上时,麦克风没有被拾起并且软件无法运行。这是获取用户媒体的代码。

function getMicrophoneAccess(){
    let constraints = {audio:true};
    navigator.mediaDevices.getUserMedia(constraints).then(function(stream){
        source = audioContext.createMediaStreamSource(stream);
        let ready = new Event('streamReady');
        dispatchEvent(ready);
    });
}

然后我实际使用我的流的地方,

function runSoundAnalysis(){
    analyser.getByteFrequencyData(soundDataArray);
    let averageSound = 0;
    for (let i = 0; i < soundDataArray.length; i+=2){
        averageSound += soundDataArray[i];
    }
    averageSound /= soundDataArray.length / 2;
    if (averageSound != 0){
        console.log(averageSound); 
    }
    return averageSound;
}

当 'chrome' 上的 运行 时,在程序的所有循环中 averageSound = 0。

感谢您的帮助:)

编辑:要补充一点,我检查过它在 firefox 上运行,所以我一定是误解了如何使用 chrome 的 getUserMedia() 或其他东西。

找到答案,在正常chrome中,要求在设置状态为'live'之前必须调用audioContext.resume()。我只是在我的初始化函数中调用它,它现在可以工作了。