经过几个小时的挣扎,我在这里。我有以下代码,显然应该只是启动我的网络摄像头并在网页上提示流:
<!doctype html>
<html>
<head>
<title>HTML5 Webcam Test</title>
</head>
<body>
<video id="sourcevid" autoplay>Put your fallback message here.</video>
<div id="errorMessage"></div>
<script>
video = document.getElementById('sourcevid');
navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.getUserMedia;
window.URL = window.URL || window.webkitURL;
function gotStream(stream) {
if (window.URL) {
video.src = window.URL.createObjectURL(stream);
} else {
video.src = stream; // Opera.
}
video.onerror = function(e) {
stream.stop();
};
stream.onended = noStream;
}
function noStream(e) {
var msg = 'No camera available.';
if (e.code == 1) {
msg = 'User denied access to use camera.';
}
document.getElementById('errorMessage').textContent = msg;
}
navigator.webkitGetUserMedia({video: true}, gotStream, noStream);
</script>
</body>
</html>
控制台中没有错误,但也没有网络摄像头流。只是“用户拒绝访问使用相机。”。
我尝试了另一个示例,显示时间过长,但显然,一旦我尝试运行页面,流就会落入.onended
函数中:
function gotStream(stream) {
video.src = URL.createObjectURL(stream);
video.onerror = function () {
stream.stop();
};
stream.onended = noStream;
[...]
哪里noStream
是一个打印一些东西的简单函数:
function noStream() {
document.getElementById('errorMessage').textContent = 'No camera available.';
}
所以基本上当我运行第二个示例时,我会在网页上显示“没有可用的相机”。
我在 Chrome 版本 22.0.1229.94 上运行,我在某处看到我需要启用一些标志,但在我的chrome://flags
; 标志的名称是Enable MediaStream
and Enable PeerConnection
,但在我的版本中,我只有第二个,我启用了它。
有什么想法吗?我正在使用的 API 是否是旧的?有人可以指出一些工作示例吗?
谢谢