navigator.mediaDevices.getUserMedia不起作用,webkitGetUserMedia也没有

时间:2015-12-08 20:40:24

标签: javascript google-chrome ssl html5-video webrtc

我一直在使用webkitGetUserMedia方法(getUserMedia通过adapter.js)在我的网络应用上为webRTC获取相机nad microhpone。我的服务器不安全(没有SSL证书)。一切正常,直到我开始收到错误说:" getUserMedia()不再适用于不安全的起源。要使用此功能,您应该考虑将应用程序切换到安全的来源,例如HTTPS。有关详细信息,请参阅https://goo.gl/rStTGz。"

我用谷歌搜索,我看到现在在Chrome中我需要使用navigator.mediaDevices.getUserMedia()。我使用的是Chrome 47.0.2526.80 m,在此页https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia上,它表示此版本应支持此方法。但是,当我调用navigator.mediaDevices.getUserMedia时,我得到了未定义。所以现在我不能在Chrome中使用任何一种方法。

任何人都可以帮我解决这个问题。 感谢

4 个答案:

答案 0 :(得分:30)

根据新的Chrome更新(来自谷歌浏览器47),Chrome浏览器不再支持http://(Unsecure Origin)的getUserMedia(),它将适用于https://(安全起源)

出于发展目的,

1.localhost被视为HTTP上的安全源,因此如果您能够从localhost运行服务器,则应该能够在该服务器上测试该功能。

2.您可以使用np.mean()标志运行chrome(替换" example.com"使用您实际想要测试的来源),这会将该来源视为此会话的安全。请注意,您还需要包含--unsafely-treat-insecure-origin-as-secure="http://example.com"以创建新的测试配置文件,以使该标志生效。

参考:https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins

答案 1 :(得分:9)

最后一次google-chrome更新使getUserMedia仅在安全起源上起作用。 有一种方法可以使其工作,但仅用于开发目的。 只需使用带有选项的cmd运行chrome

  

- 不安全性治疗不安全-原点作为安全=" example.com"

以及使用新用户个人资料的此选项

  

- 用户 - 数据 - DIR = /测试/只/简档/ DIR

FYI getUserMedia到目前为止在firefox上工作,但在我看来,它会推荐一个像google-chrome这样的安全来源。

答案 2 :(得分:5)

只要您使用https ,您仍然可以在Chrome 47,中使用旧方法名称。名称更改与47的新安全源要求正交。请参阅其他答案。

关于丢失的方法:navigator.mediaDevices.getUserMedia已放入Chrome back under a flag,因此您必须打开chrome://flags/#enable-experimental-web-platform-features或使用最新版本的adapter.js,例如:{{3 }}

答案 3 :(得分:4)

使用本地服务器在手机上进行测试时,我一直在努力获取Android chrome上pwa的麦克风权限。 (在我的桌面上可以正常工作。)以上一些建议帮助我朝着正确的方向发展,但我想澄清一下。 ...手机上的Chrome浏览器不允许触发权限请求,因为原始地址不安全。我发现这篇文章对这个主题很有帮助: Enabling the Microphone/Camera in Chrome for (Local) Unsecure Origins,作者:斯科特·卡迈克尔(Scott Carmichael)。

他说,

  1. 通过地址栏导航至Chrome中的 chrome:// flags /#unsafely-treat-insecure-origin-as-secure

  2. 找到并启用不安全来源视为安全部分。

  3. 添加您要忽略其安全来源策略的所有地址。 (如果需要,请包括端口号。)

  4. 保存并重新启动Chrome。