摄像头模拟器是一种虚拟摄像头,它把一段已知的视频、一张图片或你的屏幕当作真实摄像头的画面送进任意应用,让你每次都能用完全相同的输入来测试摄像头功能。在 Windows 上,FakeCam 可以免费做到这一点:加载一段测试片段或一张测试图案,按下播放,然后在被测应用里把 FakeCam 选为摄像头。不用打光,没有镜头,没有意外,每次运行都是一模一样的帧。

为什么要模拟摄像头,而不用真实摄像头?

真实摄像头是最糟糕的测试夹具。它的画面随光线、一天中的时段、坐在前面的人,以及镜头盖有没有盖上而变化。测试需要的恰恰相反:一个确定性(每次运行的帧完全一致)、可重复(换测试人员、换电脑,结果不变)、可控(分辨率、运动、宽高比,甚至一个黑帧,都由你决定)的输入。摄像头模拟器给你的正是这个:

  • 视频功能的 QA。摄像头预览、拍照、录制、背景虚化、人脸检测、二维码扫描、视频通话:每一项都用一段你逐帧了解的片段来跑。
  • 复现 bug。客户说“摄像头显示一片黑”,只要你能有意输入一个黑帧,就能复现。
  • 按需制造边界情况。竖屏视频、16:9 预览里的 4:3 输入、剧烈运动、永远不变的静止帧、640 x 480 的来源:每一种都是一个你留着的文件。
  • 演示和培训。不管房间什么样,演示用的摄像头在每一场里都显示同一段精修的片段。
  • 没有摄像头的机器。台式机、有人手动在上面测试的构建机、虚拟机:虚拟摄像头给它们一个摄像头。
摄像头模拟器的工作原理:测试片段或测试图案在 FakeCam 中播放,FakeCam 把画面送入一个虚拟摄像头,Chrome、Zoom、Teams、Discord 和 OBS 把它当作普通摄像头
测试输入在 FakeCam 中播放,被测应用看到的是一个普通摄像头

你需要什么

  • 一台 Windows 10 或 11 电脑(物理机,或有桌面会话的虚拟机)。
  • FakeCam,免费。它会注册一个名为“FakeCam”的虚拟摄像头。
  • 你的测试输入:一个视频文件(MP4、MOV、AVI、WMV、MKV)、一张图片(PNG、JPG、GIF、BMP),或者屏幕本身。

四步设置摄像头模拟器

  1. 安装 FakeCam,点一次启用,让 Windows 添加这个摄像头(一次管理员提示,之后不再询问)。
  2. 设置里,把摄像头分辨率设为被测应用应当收到的值:640 x 4801280 x 7201920 x 1080。这就是应用枚举到的格式。
  3. 把测试片段或测试图案拖进 FakeCam,按下播放。如果片段必须贯穿整个测试会话,打开循环
  4. 在被测应用里把 FakeCam 选为摄像头。先启动 FakeCam 再打开应用:大多数应用只在启动时读取摄像头列表。
四个步骤:启用 FakeCam,设置摄像头分辨率,加载测试片段并按下播放,然后在被测应用里选择 FakeCam
四步得到一个确定性的摄像头

要在测试中途切换输入,把另一个文件拖进 FakeCam 即可:应用保持同一个摄像头,只是收到新的帧。要测试“没有摄像头”或“摄像头被拔出”的路径,按下停止,或者取消注册摄像头。

一套值得留着的测试素材

四种输入就能覆盖大多数摄像头测试用例。把它们放在测试计划旁边的文件夹里。

四种测试输入:彩条测试图案、高速运动片段、有人脸的人像片段,以及一个黑帧
一小套输入素材就能覆盖大多数摄像头测试用例
输入 能发现什么
测试图案(彩条、圆形、网格) 裁剪、拉伸、宽高比错误、偏色、镜像:圆变成了椭圆,或者彩条被截掉一段,一眼就能看出来
高速运动片段(快速摇镜、移动的细节) 掉帧、编码器画质、通话中的延迟、比摄像头慢半拍的预览
人像片段(一个人,光线稳定) 人脸检测、背景虚化和替换、自动取景,以及你自己产品里的身份验证流程
黑帧或一张静态图片 “摄像头不工作”的支持路径、无运动检测、截图和拍照功能

把下面这张图案保存下来,用 FakeCam 播放;它特意画成不含文字,测试团队用哪种语言都能用。

摄像头测试图案:彩条、灰阶渐变、带十字准线的居中圆形、细网格、安全框,以及像素尺寸
保存这张图案,把它当作你的摄像头播放:圆必须保持是圆的,彩条必须顶到两边

摄像头模拟器与 Chrome 假摄像头参数的对比

如果你只在自动化浏览器里测试网页应用,Chrome 和 Edge 内置了一个假摄像头:用 --use-fake-device-for-media-stream 启动浏览器,要输入你自己的文件,再加上 --use-file-for-fake-video-capture=clip.y4m。Playwright 和 Puppeteer 会帮你配好这些参数。在 CI 里这是正确的工具。不过它止步于浏览器:那个浏览器进程之外的任何东西都看不到摄像头。

像 FakeCam 这样的虚拟摄像头工作在 Windows 层面,所以每个应用都能看到它:桌面应用、Electron 应用、Windows 的“相机”应用、真实 Zoom 客户端里的视频通话,以及测试人员亲手打开的普通浏览器会话。坦诚的对比:

Chrome 的假摄像头参数与虚拟摄像头的对比:各自覆盖什么
浏览器参数用于自动化浏览器测试,虚拟摄像头用于其他一切
Chrome 假设备参数 FakeCam 虚拟摄像头
摄像头存在于哪里 仅在那个浏览器进程内 Windows 全局,任意应用
输入格式 Y4M / MJPEG 文件 MP4、MOV、AVI、WMV、MKV、图片、屏幕
自动化测试(CI) 是,为此而生 否:FakeCam 靠手动操作
桌面应用的手动 QA
真实会议客户端(Zoom、Teams、Discord)
测试中途更换输入 重启浏览器 拖入新文件
费用 免费 免费(可选一次性 PRO)

两者都用:流水线里用参数,探索性测试、桌面应用、支持问题复现和演示用虚拟摄像头。

让结果可靠的技巧

  • 有意匹配分辨率。通过修改 FakeCam 的分辨率设置,再重启应用,逐一测试应用支持的每种分辨率:很多应用只枚举一次格式。
  • 长会话用循环。循环播放的片段让摄像头在整个测试期间保持“活着”;播完就停的片段会把最后一帧留在屏幕上。
  • 镜像也是一个测试用例。会议应用会镜像自视画面,但不会镜像别人看到的画面。FakeCam 的镜像开关让你两种都能检查。
  • 屏幕作为输入。选择屏幕标签页,把一个正在运行的应用窗口(计时器、二维码页面)送进摄像头,对扫描类功能很有用。详见把屏幕当作摄像头
  • 一次一个应用。摄像头同一时间只能被一个应用打开。开始下一个测试之前,先关掉上一个应用的预览。

摄像头模拟器不能做什么

  • 没有脚本,也没有命令行。FakeCam 是手动工具:文件由你手动加载。脚本化的浏览器测试请用上面的 Chrome 参数。
  • 没有音频。虚拟摄像头只替换摄像头画面。麦克风路径需要单独测试。
  • 不是移动端的虚拟摄像头。它运行在 Windows 上。Android 的话,模拟器的虚拟场景摄像头能覆盖类似的需求。
  • 不是用来骗过验证的。摄像头模拟器是测试和演示工具。用它绕过别人的身份验证不是它的用途,而且不少服务明令禁止。

继续阅读