为什么getUserMedia在我点击“”时抛出[object NavigatorUserMediaError];允许“

Why is getUserMedia throwing a [object NavigatorUserMediaError] when I click "Allow" in Chrome?

本文关键字:object NavigatorUserMediaError 允许 getUserMedia 为什么      更新时间:2023-09-26

最近,当我试图通过我的网站访问客户端的麦克风时,开始出现错误。当Chrome询问是否允许网站访问用户的麦克风时,无论用户点击"允许"还是"拒绝",都会产生[object NavigatorUserMediaError]。无论麦克风是否真的插入到计算机(运行Ubuntu 12.04)中,这种情况都会发生。

通过Firefox进行的进一步测试表明,这并不是Chrome特有的。这个问题是在我做了一个实时输入演示,然后注销电脑后才开始的。我试着制作一个访问麦克风的基本演示,结果遇到了同样的问题。

var getVideo = false, getAudio = true;
navigator.getUserMedia || (navigator.getUserMedia = navigator.mozGetUserMedia ||
        navigator.webkitGetUserMedia || navigator.msGetUserMedia);
function init() {
    if(navigator.getUserMedia) {
        navigator.getUserMedia({video:getVideo, audio:getAudio}, onSuccess, onError);
    } else {
        alert('getUserMedia failed.');
    }
}
function onSuccess() {
    console.log("Yay");
}
function onError(err) {
    console.log("Noo " + err);
}

这相当令人困惑,因为它一直工作得很好,直到我注销,然后重新登录并尝试再次测试它。

我通过Jetty和Eclipse在本地托管web代码。我通过在web浏览器中键入localhost:8080/my-program来访问它。

编辑:错误发生后,chrome地址栏中会显示一个摄像头的图标,表示chrome正在访问我的麦克风,并列出两个可能的麦克风,"默认"answers"内置音频模拟立体声"

编辑2:这个错误也发生在其他试图通过webrtc访问我的麦克风的网站上。传统的Flash实现仍然有效。

Chrome在打开时似乎每隔一段时间就会抛出一条错误消息。

[361:362:0725/095320:ERROR:audio_output_device.cc(186)] 
Not implemented reached in virtual void
media::AudioOutputDevice::OnStateChanged(media::AudioOutputIPCDelegate::State)

编辑3:我能够进一步澄清错误信息

NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}

**一次一个浏览器**

当我在多个浏览器打开的情况下进行测试时,我遇到过这种情况。看起来一次只有一个浏览器可以访问媒体。

ie当我在Chrome中打开页面,视频/音频正常工作时,Firefox将无法工作,当我在Firefox中打开页面时,Chrome将无法工作。

这可能发生在两种情况下,我在Ubuntu 12.04:中都经历过

  • 您单击了一次"拒绝",然后浏览器保存该设置,当被要求访问该页面中的媒体时,总是返回错误。(当你从浏览器中收到问题时,情况似乎并非如此,但你只需转到地址栏,单击相机图标,然后更改选项即可再次提问)。

  • 您的浏览器无法访问媒体设备,就像在任何没有摄像头或麦克风的计算机中一样,即使您按"允许",也会收到错误事件,因为它无法为您提供任何流。尝试检查浏览器设置,看看是否可以选择所选相机。我经历过这种情况,但列表是空的。为了解决这个问题,我不得不重新启动机器,Chrome开始再次显示设备列表。

NavigatorUserMediaError{code:1,PERMISSION_DENIED:1}

这意味着您的浏览器设置不允许您访问相机。进入浏览器设置->在网站设置下,您会发现一个您已阻止访问设备的网页列表。

getUserMedia仅适用于https;本地主机(即http://localhost)。Safari似乎也不允许在iFrame中使用getUserMedia。我总是收到一个"试图从一个与顶级框架不同的安全来源的文档调用getUserMedia"错误。这使得像codepen和jsfiddle这样的网站无法使用。

更多详细信息https://webrtchacks.com/safari-webrtc/