我推荐你使用像ScriptCam这样的第三方库,但是由于你声明要编写自己的代码,所以我将解释使用新的用户媒体API。
它是在 W3C 工作草案 HTML Media Capture 和 getUserMedia() 中引入的。以下浏览器实验性地支持它:
在 Chrome 18 或更高版本中,可以访问 about:flags 站点启用 API。
在 Opera 中,您必须下载一个实验性的 Android or desktop builds。
在 HTML 中,您需要使用 video 元素
<video id="basic-stream" class="videostream" autoplay=""></video>
首先你需要设置权限:
navigator.getUserMedia({video: true, audio: true}, function(localMediaStream) {
var video = document.querySelector('video');
video.src = window.URL.createObjectURL(localMediaStream);
// Note: onloadedmetadata doesn't fire in Chrome when using it with getUserMedia.
// See crbug.com/110938.
video.onloadedmetadata = function(e) {
// Ready to go. Do some stuff.
};
}, onFailSoHard);
如果您想要在 Chrome 和 Opera 中运行的代码,以下代码示例应该可以完成工作:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
var video = document.querySelector('video');
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true, video: true}, function(stream) {
if (navigator.webkitGetUserMedia) {
video.src = window.webkitURL.createObjectURL(stream);
} else {
video.src = stream; // Opera
}
}, onFailSoHard);
} else {
video.src = 'somevideo.webm'; // fallback.
}
可以通过以下方式检查 API 是否可用:
function hasGetUserMedia() {
// Note: Opera builds are unprefixed.
return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.msGetUserMedia);
}
更多信息可以参考教程Capturing Audio & Video in HTML
供应商前缀可能会导致语法问题,因此请注意它们。