WebRTC getUserMedia承诺在Chrome

时间:2015-12-10 10:28:12

标签: google-chrome webrtc getusermedia

Chrome是否支持WebRTC的基于承诺的API?我无法在Chrome中使用基于getUserMedia()承诺的API。

<!DOCTYPE html>
<html>
    <head>
        <title> Mitel WebRTC client </title>
        <script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
        <script src='dist/webrtc.min.js'></script>

        <script type="text/javascript">
            function startUp() {

                var options = {
                    audio: true,
                    video: true
                };
                if (getUserMedia) {
                    getUserMedia(options)
                    .then(function (stream) {
                        console.log("Acquired audio and video!");
                    })
                    .catch(function (err) {
                        console.log(err.name + ": " + err.message);
                    });
                } else {
                    alert("WebRTC not supported on this browser");
                }
            }
        </script>
    </head>

    <body onload="startUp();">
        <h1>WebRTC Promise API Client Application</h1>
    </body>
</html>

在控制台上,我看到以下错误

This appears to be Chrome
adapter-latest.js:32 chrome: {"audio":true,"video":true}
adapter-latest.js:410 Uncaught TypeError: Failed to execute 'webkitGetUserMedia' on 'Navigator': The callback provided as parameter 2 is not a function.

我想使用基于promise的API。我错过了什么吗?

4 个答案:

答案 0 :(得分:13)

目前尚未在Chrome中实施,但如果您使用官方adapter.js WebRTC polyfill,则可以使用它:https://jsfiddle.net/srn9db4h/

var constraints = { video: true, audio: true };

navigator.mediaDevices.getUserMedia(constraints)
  .then(stream => video.srcObject = stream)
  .catch(e => console.error(e));

Firefox和Edge本身支持FWIW。

更新: Chrome(50)似乎现在支持此功能。 Chrome 52甚至支持srcObject

答案 1 :(得分:0)

要访问navigator.mediaDevices,必须使用HTTPS连接连接站点。无法使用HTTP访问此功能。

https://developers.google.com/web/fundamentals/media/capturing-images/

  

警告:直接访问相机是一项强大的功能。它需要用户的同意,并且您的网站必须位于安全来源(HTTPS)上。

答案 2 :(得分:0)

尽管不建议这样做,但是您仍然可以尝试通过禁用媒体安全性来测试项目。

chrome://flags/#unsafely-treat-insecure-origin-as-secure

您可以添加IP,Chrome会将其视为安全。

答案 3 :(得分:0)

如果您正在http中运行Chrome浏览器,也会出现此错误。如果是这样,则应将应用程序运行为https。 Chrome仅支持带有http的localhost网址。

`http://jsfiddle.net/jib1/srn9db4h/ `
// not working

`https://jsfiddle.net/jib1/srn9db4h/`
//working with https