JavaScript调用摄像头

在浏览器中通过JavaScript调用摄像头主要使用 MediaDevices API,以下是详细步骤和示例代码:


步骤说明

  1. 请求用户授权:使用 navigator.mediaDevices.getUserMedia() 方法请求摄像头权限。
  2. 获取视频流:成功授权后,获得包含视频轨道的 MediaStream 对象。
  3. 绑定视频流到元素:将视频流绑定到 <video> 元素以显示实时画面。
  4. 错误处理:处理用户拒绝授权或设备不存在的情况。
  5. 释放资源:在不需要时关闭摄像头。

完整示例代码

<!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>

关键点解析

  1. HTTPS 要求
    现代浏览器要求通过 HTTPS 访问(localhost127.0.0.1 除外),否则API会被阻止。

  2. getUserMedia 参数

    • video: true 表示启用视频,可通过对象配置详细参数(如分辨率、前后摄像头)。
    • audio: true 启用麦克风(示例中未启用)。
  3. playsinline 属性
    在移动端浏览器中防止视频全屏播放(如iOS Safari)。

  4. 错误类型

    • 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);
}

浏览器兼容性

  • 现代浏览器(Chrome 53+、Firefox 36+、Edge 12+、Safari 11+)均支持。
  • 旧版浏览器可能需要前缀(如 navigator.webkitGetUserMedia)。

通过以上方法,即可在浏览器中安全地调用摄像头并实现基础功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺公子之数据科学与艺术

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值