当我点击Chrome中的"允许"时,为什么getUserMedia会抛出[对象NavigatorUserMediaError]?

Big*_*uck 10 javascript audio jetty embedded-jetty webrtc

最近,我在尝试通过我的网站访问客户端的麦克风时开始出错.当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);
}
Run Code Online (Sandbox Code Playgroud)

这是相当令人费解的,因为它已经完美地工作,直到我退出然后重新登录并尝试再次测试它.

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

编辑:错误发生后,相机的图标显示在Chrome地址栏中,表示Chrome正在访问我的麦克风并列出两个可能的麦克风,"默认"和"内置音频模拟立体声".

编辑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)
Run Code Online (Sandbox Code Playgroud)

编辑3:我能够更多地澄清错误信息

NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}
Run Code Online (Sandbox Code Playgroud)

小智 6

**一次一个浏览器**

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

即当我在Chrome中打开我的页面,并且视频/音频正在运行时,Firefox将无法正常工作,当我在Firefox中使用它时,Chrome无法正常工作.


nak*_*kib 3

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

  • 您单击“拒绝”一次,然后浏览器会保存该设置,当要求在该页面中进行媒体访问时始终返回错误。(这似乎不是您的情况,因为您从浏览器收到问题,但您只需转到地址栏,单击相机图标并更改选项以再次询问)。

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