在浏览器中通过JavaScript调用摄像头主要使用 MediaDevices API,以下是详细步骤和示例代码:
navigator.mediaDevices.getUserMedia()
方法请求摄像头权限。MediaStream
对象。<video>
元素以显示实时画面。<!DOCTYPE html>
<html>
<body>
<video id="video" width="640" height="480" autoplay playsinline></video>
<button onclick="stopCamera()">停止摄像头</button>
<script>
const videoElement = document.getElementById('video');
// 1. 请求摄像头访问权限
async function startCamera() {
try {
const constraints = {
video: {
width: { ideal: 1280 }, // 分辨率偏好
height: { ideal: 720 },
facingMode: "user" // 前置摄像头("environment" 为后置)
},
audio: false // 关闭麦克风
};
const stream = await navigator.mediaDevices.getUserMedia(constraints);
videoElement.srcObject = stream;
} catch (error) {
console.error('摄像头访问失败:', error);
alert('无法访问摄像头,请检查权限和设备。');
}
}
// 2. 停止摄像头并释放资源
function stopCamera() {
if (videoElement.srcObject) {
const tracks = videoElement.srcObject.getTracks();
tracks.forEach(track => track.stop()); // 关闭所有轨道
videoElement.srcObject = null;
}
}
// 自动启动摄像头(或由按钮触发)
startCamera();
</script>
</body>
</html>
localhost
和 127.0.0.1
除外),否则API会被阻止。
getUserMedia
参数
video: true
表示启用视频,可通过对象配置详细参数(如分辨率、前后摄像头)。audio: true
启用麦克风(示例中未启用)。playsinline
属性
在移动端浏览器中防止视频全屏播放(如iOS Safari)。
NotAllowedError
: 用户拒绝授权。NotFoundError
: 无可用摄像头设备。function takePhoto() {
const canvas = document.createElement('canvas');
canvas.width = videoElement.videoWidth;
canvas.height = videoElement.videoHeight;
const ctx = canvas.getContext('2d');
ctx.drawImage(videoElement, 0, 0);
// 获取Base64图片数据
const photoData = canvas.toDataURL('image/png');
console.log('照片数据:', photoData);
}
navigator.webkitGetUserMedia
)。通过以上方法,即可在浏览器中安全地调用摄像头并实现基础功能。