我了解了web-rtc,它说您可以捕获视频摄像头,我使用了演示,这仅适用于 chrome ..
当我在 Firefox 上打开它"getUserMedia() not supported in your browser."
时,当我打开这个HTML5-rocks-demo时,我在另一只手上收到消息
它工作 100%。什么变化或插件或我想念的东西让getusermedia()
工作。
我了解了web-rtc,它说您可以捕获视频摄像头,我使用了演示,这仅适用于 chrome ..
当我在 Firefox 上打开它"getUserMedia() not supported in your browser."
时,当我打开这个HTML5-rocks-demo时,我在另一只手上收到消息
它工作 100%。什么变化或插件或我想念的东西让getusermedia()
工作。
问题不仅仅是带前缀的函数名;提供的流在不同浏览器中的工作方式不同。在这里,我将带您完成它。
我假设您已经在名为 的变量中设置了一个视频元素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();
});
这应该涵盖 Firefox、Chrome 和 Opera。IE 和 Safari 尚不支持。
另一个需要注意的潜在烦人的事情是如果您想在离开网页之前停止使用它,如何关闭它。使用这个功能:
function stopWebCam() {
if (video) {
video.pause();
video.src = '';
video.load();
}
if (cameraStream && cameraStream.stop) {
cameraStream.stop();
}
stream = null;
}
由于 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);
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);
getUserMedia
需要以 webkit- 或 moz- 为前缀。第一个示例仅以 webkit- 为前缀。因此它永远不会在 Firexox 上运行,只能在 Chrome 和 Safari 上运行。
代码示例未显示前缀...
前缀可以通过这种方式完成:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
2021 年 1 月 -navigate.getUserMedia
已替换为navigate.mediaDevices.getUserMedia