最近,我在尝试通过我的网站访问客户端的麦克风时遇到了错误。当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代码。我通过在网络浏览器中输入localhost:8080/my-program
来访问它。
编辑: 发生错误后,相机的图标会显示在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)
编辑3: 我能够更多地澄清错误信息
NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}
答案 0 :(得分:6)
**一次只能浏览一个**
当我打开多个浏览器进行测试时,我遇到过这种情况。似乎一次只能有一个浏览器访问媒体。
即当我在Chrome中打开我的页面并且视频/音频正常工作时,Firefox就无法工作,当我在Firefox中使用它时,Chrome就不会#39; t work。
答案 1 :(得分:3)
这可能发生在两种情况下,我在Ubuntu 12.04中都遇到过:
您点击了拒绝一次,然后浏览器保存该设置,在该页面中要求媒体访问时始终返回错误。 (当您从浏览器中获得问题时,似乎不是这种情况,但您只需转到地址栏,单击相机图标并更改选项以再次询问)。
您的浏览器无法访问媒体设备,也没有任何没有摄像头或麦克风的计算机,即使您按下允许,也会收到错误事件,因为它无法为您提供任何流。尝试检查浏览器设置,看看是否可以选择所选的摄像头。我经历过这个,清单是空的。为了解决这个问题,我不得不重启机器,Chrome又开始重新显示设备列表。
答案 2 :(得分:1)
NavigatorUserMediaError {code:1,PERMISSION_DENIED:1}
这意味着您的浏览器设置不允许您访问相机。进入您的浏览器设置 - >在网站设置下,您会找到阻止您访问设备的网页列表。
答案 3 :(得分:0)
getUserMedia仅适用于https; localhost也不例外(即http://localhost)。 Safari似乎也从未在iFrame中允许getUserMedia。我总是得到一个“试图从具有不同于其顶层框架的安全性来源的文档中调用getUserMedia”错误。这使得使用像codepen和jsfiddle这样的网站是不可能的。