Chrome:navigator.mediaDevices.getUserMedia 不是函数

Posted

技术标签:

【中文标题】Chrome:navigator.mediaDevices.getUserMedia 不是函数【英文标题】:Chrome: navigator.mediaDevices.getUserMedia is not a function 【发布时间】:2016-09-15 20:52:29 【问题描述】:

我在本地主机上并尝试在 Chrome 中使用 MediaDevices.getUserMedia 方法。我收到标题错误。我知道在 Chrome 中只能使用安全来源的这个功能,并且 localhost 被认为是安全的来源。此外,这适用于 Firefox。

这就是我使用它的方式,如 Google Developers 网站 https://developers.google.com/web/updates/2015/10/media-devices?hl=en 所示:

var constraints = window.constraints = 
            audio: false,
            video: true
;


navigator.mediaDevices.getUserMedia(constraints).then(function(stream) 
            callFactory.broadcastAssembly(stream);
            ...
);

【问题讨论】:

我认为你需要有 HTTPS 才能让它工作。 @Tom 在本地主机上服务是特别允许的:chromium.org/Home/chromium-security/… @Nateowami 不是在我写评论的时候。 【参考方案1】:

在一些最新的浏览器上navigator.getUserMedia 表现不佳。所以,尝试使用navigator.mediaDevices.getUserMedia。或者,最好检查navigator.mediaDevices.getUserMedia 是否可用于浏览器使用navigator.mediaDevices.getUserMedia 或使用navigator.getUserMedia

navigator.getWebcam = (navigator.getUserMedia || navigator.webKitGetUserMedia || navigator.moxGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
if (navigator.mediaDevices.getUserMedia) 
    navigator.mediaDevices.getUserMedia(  audio: true, video: true )
    .then(function (stream) 
                  //Display the video stream in the video object
     )
     .catch(function (e)  logError(e.name + ": " + e.message); );

else 
navigator.getWebcam( audio: true, video: true , 
     function (stream) 
             //Display the video stream in the video object
     , 
     function ()  logError("Web cam is not accessible."); );

希望这能解决您的问题。

【讨论】:

【参考方案2】:

尝试启用:chrome://flags/#enable-experimental-web-platform-features

在铬中为我工作

【讨论】:

也为我工作。 navigator.mediaDevices.getUserMedia 是在 Chrome 中定义但不是在 Chromium 中定义? MDN warns against using 已弃用的 navigator.getUserMedia,警告“它可能随时中断”。我试图不使用它,但如果不更改该标志,navigator.mediaDevices.getUserMedia 在 Chromium 中不可用。编辑:与我读到的相反,didn't come out until Chrome 53(我使用的是 Chromium 52)。 我在 MDN 的脚注中找到了答案:From version 47 to 52, the promise-based interface was only available through the adapter.js polyfill, or using the flag chrome://flags/#enable-experimental-web-platform-features. Starting with version 53, the promise-based interface is on by default, though that interface is still not available through navigator. 我正在使用版本 71.0.3578.98(官方构建)(64 位),#enable-experimental-web-platform-features 没有帮助我使用 Twilio:github.com/TwilioDevEd/client-quickstart-js/blob/…。 该死。我又回来了,没有阅读我上面的评论并在 Brave (Brave is up to date Version 1.22.71 Chromium: 89.0.4389.114 (Official Build) (64-bit)) 中再次尝试,但仍然没有用。【参考方案3】:

我的 chrome 浏览器也有同样的问题。 首先通过在https://test.webrtc.org/ 中测试来检查您的手机是否受支持

如果您的手机通过了所有案例,请检查第 2 步

第 2 步: 如果您托管网页或运行第三方网页,请查看您的手机是否启用了摄像头权限。

另外一个主要问题是WEBRTC 在HTTP 站点中不受支持,仅在HTTPS 站点中受支持

This is the https site which allows web This is the http site which gives a error

【讨论】:

没错,这也是我的问题(+1)【参考方案4】:

我陷入了同样的问题。一种解决方案是关注并下载@ellerynz 在上述评论中分享的扩展Web Server for Chrome,或者

如果你安装了python,你也可以这样做

python -m SimpleHTTPServer [port]

按回车后,您应该会看到以下消息:

Serving HTTP on 0.0.0.0 port 8000 ...

打开浏览器放

http://127.0.0.1:[port]

【讨论】:

优秀 - 使用SimpleHTTPServer 正好遇到这个问题;将 IP 从 0.0.0.0 更改为 127.0.0.1 解决了它【参考方案5】:

您是否尝试过包含 adapter.js polyfill ?检查此页面: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Browser_compatibility

Chrome 需要像这样或根据@Simon Malone 的说明启用chrome://flags/#enable-experimental-web-platform-features

【讨论】:

【参考方案6】:

我也遇到了这个问题,更改标志似乎不起作用。我在 Google 的 WebRTC tutorial 中遇到了这个 chrome 扩展程序 - Web Server for Chrome,这似乎可以解决问题。

【讨论】:

【参考方案7】:

请改用navigator.getUserMedia()。

navigator.getUserMedia(constraints, successCallback, errorCallback);

【讨论】:

我希望使用 MediaDevices.getUserMedia,因为 Navigator.getUserMedia 在 Mozilla 上被列为已弃用。我仍然很困惑为什么前者对我不起作用。 你可以使用你想要的,但你必须写一些 polyfill。

以上是关于Chrome:navigator.mediaDevices.getUserMedia 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

chrome扩展开发,怎么获取响应信息?

chrome 一直提示“喔唷,崩溃了”

怎么使chrome全屏的代码

谷歌chrome://chrome-urls/

怎么使chrome全屏的代码

如何编辑chrome语言文件?