首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript调用摄像头

JavaScript调用摄像头

作者头像
用户1750537
发布2025-08-29 19:32:16
发布2025-08-29 19:32:16
6400
代码可运行
举报
运行总次数:0
代码可运行

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

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

完整示例代码
代码语言:javascript
代码运行次数:0
运行
复制
<!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: 无可用摄像头设备。

扩展功能:拍照示例
代码语言:javascript
代码运行次数:0
运行
复制
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)。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤说明
  • 完整示例代码
  • 关键点解析
  • 扩展功能:拍照示例
  • 浏览器兼容性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档