【问题标题】:Why is getUserMedia throwing a [object NavigatorUserMediaError] when I click "Allow" in Chrome?当我在 Chrome 中单击“允许”时,为什么 getUserMedia 会抛出 [object NavigatorUserMediaError]?
【发布时间】:2013-07-22 17:20:55
【问题描述】:

最近,我在尝试通过我的网站访问客户的麦克风时开始出错。当 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}

【问题讨论】:

  • 这是我的系统问题,而不是我的网络代码问题。在其他计算机上,该网站按预期运行。

标签: javascript audio jetty webrtc embedded-jetty


【解决方案1】:

** 一次一个浏览器 **

我在打开多个浏览器进行测试时遇到了这种情况。一次似乎只有一个浏览器可以访问媒体。

ie 如果我在 Chrome 中打开我的页面,并且视频/音频可以正常工作,那么 Firefox 将无法正常工作,而当我在 Firefox 中正常工作时,Chrome 将无法正常工作。

【讨论】:

  • 感谢您的提示。
【解决方案2】:

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

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

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

【讨论】:

  • Chrome 会看到两个麦克风选项,默认和内置音频模拟立体声。两个选项都会发生错误。如果你说的是真的,那么当我没有插入麦克风时,网站是如何工作的?
  • 第三种可能发生这种情况的情况是通过 HTTP 访问站点并且该站点不是 localhost - Chrome 现在仅支持通过 HTTPs 的音频。
【解决方案3】:

NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}

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

【讨论】:

    【解决方案4】:

    getUserMedia 仅适用于 https;本地主机也不例外(即http://localhost)。 Safari 似乎也不允许从 iFrame 中获取用户媒体。我总是收到“尝试从具有与其顶级框架不同的安全来源的文档中调用 getUserMedia”错误。这使得使用像 codepen 和 jsfiddle 这样的网站是不可能的。

    更多详情https://webrtchacks.com/safari-webrtc/

    【讨论】:

    • 如果我没记错的话,Chrome 中的localhost 有一个例外。
    • 是的,现在Chrome中的localhost也支持了。
    • 我以前在 localhost 中使用过 webRtc,它工作得很好。但最近自从新的浏览器更新以来,我收到了这个错误。 DevicesNotFoundError检查此link
    • Safari 现在允许您在本地主机上也允许它:开发菜单/WebRTC > 允许在不安全的站点上捕获媒体。
    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 2011-01-12
    • 2011-11-21
    • 2016-03-31
    • 2016-04-05
    • 2021-01-17
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多