如何使getUserMedia()适用于所有浏览器

Mua*_*ath 21 javascript html5 html5-video webrtc

我了解了web-rtc,它说你可以捕获视频摄像头,我使用了演示,这只适用于镀铬..

当我在firefox上打开它"getUserMedia() not supported in your browser." 时,当我打开这个HTML5-rocks-demo时,我会在另一只手上收到消息

它100%工作.什么改变或插件或我想念的东西让我的getusermedia()工作.

bri*_*rls 27

问题不仅仅是前缀函数名称; 提供的流在不同浏览器中的工作方式不同 在这里,我将引导您完成它.

我假设你已经在变量中设置了一个视频元素video.

//I don't usually like to overwrite publicly accessible variables, but that's just me
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var cameraStream;

getUserMedia.call(navigator, {
    video: true,
    audio: true //optional
}, function (stream) {
    /*
    Here's where you handle the stream differently. Chrome needs to convert the stream
    to an object URL, but Firefox's stream already is one.
    */
    if (window.webkitURL) {
        video.src = window.webkitURL.createObjectURL(stream);
    } else {
        video.src = stream;
    }

    //save it for later
    cameraStream = stream;

    video.play();
});
Run Code Online (Sandbox Code Playgroud)

这应该涵盖Firefox,Chrome和Opera.IE和Safari尚不支持它.

另一个可能令人讨厌的事情是如果要在离开网页之前停止使用相机,请关闭相机.使用此功能:

function stopWebCam() {
    if (video) {
        video.pause();
        video.src = '';
        video.load();
    }

    if (cameraStream && cameraStream.stop) {
        cameraStream.stop();
    }
    stream = null;
}
Run Code Online (Sandbox Code Playgroud)

  • 以下是一个显示浏览器支持的图表:http://caniuse.com/#feat=stream (2认同)
  • 这个答案有任何更新吗?我读到我们现在需要使用 `navigator.mediaDevices.getUserMedia`。 (2认同)

Joh*_*Oin 12

由于Safari 11已经推出,因此无处不在(在最近版本的Chrome,Firefox和Safari 11上测试过):

var constraints = {audio: false, video: true};
var video = document.querySelector("video");

function successCallback(stream) {
  video.srcObject = stream;
  video.play();
}

function errorCallback(error) {
  console.log("navigator.getUserMedia error: ", error);
}

navigator.mediaDevices.getUserMedia(constraints)
  .then(successCallback)
  .catch(errorCallback);
Run Code Online (Sandbox Code Playgroud)


Mua*_*ath 8

小提琴

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

var constraints = {audio: false, video: true};
var video = document.querySelector("video");

function successCallback(stream) {
  window.stream = stream; // stream available to console
  if (window.URL) {
    video.src = window.URL.createObjectURL(stream);
  } else {
    video.src = stream;
  }
}

function errorCallback(error){
  console.log("navigator.getUserMedia error: ", error);
}

navigator.getUserMedia(constraints, successCallback, errorCallback);
Run Code Online (Sandbox Code Playgroud)

  • 在Safari中,所有这三个都是未定义的:`navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;` (4认同)

Mik*_*ren 2

getUserMedia需要以 webkit- 或 moz- 为前缀。第一个示例仅带有 webkit- 前缀。因此它永远无法在 Firexox 上运行,只能在 Chrome 和 Safari 上运行。

代码示例不显示前缀...

前缀可以这样完成:

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
Run Code Online (Sandbox Code Playgroud)