环境准备:浏览器兼容性检查、本地Web服务器搭建、获取第一个摄像头画面

好,咱们正式开始动手了。这一章的目标很明确——把开发环境搭好,然后亲眼看到摄像头画面出现在浏览器里。我见过太多初学者卡在环境配置上,其实说白了就三步:检查浏览器、搭个本地服务器、写几行代码调摄像头。咱们一步步来。

浏览器兼容性检查

WebRTC 这东西,不是所有浏览器都一视同仁的。我个人习惯先打开 caniuse.com 查一下,但更直接的办法是写个简单页面测一测。

我的经验:Chrome 和 Edge 对 WebRTC 支持最稳定。Firefox 也不错,但 Safari 偶尔会出些怪问题。开发阶段我建议用 Chrome。

打开 Chrome,按 F12 进控制台,输入下面这行代码:

navigator.mediaDevices.getUserMedia === undefined ? 
  console.log('❌ 不支持') : console.log('✅ 支持')

如果看到 ✅,恭喜你,环境没问题。如果看到 ❌,别慌——大概率是 HTTPS 的问题。WebRTC 要求安全上下文,说白了就是 localhost 或者 HTTPS 才能用。

注意:直接用 file:// 打开 HTML 文件,getUserMedia 会直接报错。必须通过 Web 服务器访问。

本地 Web 服务器搭建

嗯,这里我推荐两种方式,你选一个顺手的就行。

方式一:Node.js(我推荐)

如果你还没装 Node.js,去 nodejs.org 下载 LTS 版本。装完之后,打开终端:

# 安装一个轻量级服务器
npm install -g live-server

# 在项目目录里启动
cd your-project-folder
live-server --port=8080

浏览器会自动打开 http://localhost:8080。搞定。

方式二:Python(更轻量)

如果你电脑上有 Python,一行命令就够了:

# Python 3
python -m http.server 8080

然后手动打开浏览器,输入 http://localhost:8080。

方式 安装步骤 启动命令 适合场景
Node.js + live-server 装 Node.js → npm install -g live-server live-server --port=8080 前端开发,自动刷新
Python http.server 装 Python(通常自带) python -m http.server 8080 快速测试,无需额外安装
避坑指南:我曾经在 Windows 上遇到端口被占用的问题。如果 8080 不行,换成 3000、8000 都行。另外,确保防火墙没拦截。

获取第一个摄像头画面

好,重头戏来了。咱们写一个完整的 HTML 页面,把摄像头画面显示出来。

新建一个 index.html,把下面代码贴进去:

<!DOCTYPE html>
<html>
<head>
  <title>我的第一个摄像头画面</title>
</head>
<body>
  <h1>📷 摄像头画面</h1>
  <video id="localVideo" autoplay playsinline></video>
  <button id="startBtn">开启摄像头</button>

  <script>
    const video = document.getElementById('localVideo');
    const startBtn = document.getElementById('startBtn');

    startBtn.addEventListener('click', async () => {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({
          video: true,
          audio: false
        });
        video.srcObject = stream;
        console.log('✅ 摄像头已开启');
      } catch (err) {
        console.error('❌ 摄像头开启失败:', err);
      }
    });
  </script>
</body>
</html>

用 live-server 或 Python 服务器打开这个页面。点击「开启摄像头」按钮,浏览器会弹出权限请求——点允许。然后你就能看到自己了。

小技巧:如果画面是黑的,检查一下摄像头物理开关。我有一台笔记本的摄像头被贴了贴纸,找了半天原因……

核心流程可视化

下面这张图帮你理清整个流程:

获取摄像头画面核心流程 用户点击按钮 getUserMedia() 权限请求 ✅ 获取 MediaStream ❌ 捕获错误 video 显示画面 ⚠️ 必须通过 Web 服务器 file:// 协议会失败 建议使用 localhost

常见问题与排查

第一次跑通摄像头,我遇到过不少坑。列几个最常见的:

  • 权限被拒绝:检查浏览器地址栏左侧的锁图标,确认摄像头权限是「允许」。
  • NotAllowedError:用户点了「阻止」。刷新页面重新请求。
  • NotReadableError:摄像头被其他应用占用了(比如 Zoom、)。关掉再试。
  • OverconstrainedError:你指定的分辨率摄像头不支持。先不加约束试试。
重要:生产环境一定要处理错误。用户拒绝权限是常态,别让页面直接白屏。

本章小结

到这一步,你已经完成了三件事:确认浏览器支持 WebRTC、搭建了本地开发服务器、成功获取了摄像头画面。别小看这几步——这是所有 WebRTC 应用的起点。后面所有的音视频通信,都建立在 getUserMedia 返回的这个 MediaStream 之上。