这是一个用于在浏览器环境中模拟或劫持摄像头输入的技术工具。它能够将本地视频文件伪装成实时摄像头流,从而绕过真实的硬件调用。
在进行 Web 端摄像头相关功能的自动化测试、远程调试或在特定环境下测试人脸识别/视频通话流程时,往往受限于真实的硬件设备。本项目旨在提供一个轻量级的注入方案,通过纯前端技术实现摄像头流的劫持与自定义视频替换。
- 接口劫持:通过 JavaScript 对
navigator.mediaDevices.getUserMedia及navigator.getUserMedia等原生 API 进行猴子补丁(Monkey Patching)。 - 合成器构建:在内存中创建一个 Canvas 元素作为主合成器,负责处理视频帧的缩放、镜像和绘制。
- 流转换:利用
canvas.captureStream()方法,将 Canvas 的实时绘图过程转换为标准的MediaStream媒体流。 - UI 注入:向目标页面注入一个半透明的控制面板,提供视频文件上传、模式切换和状态监控功能。
- 动态同步:通过定时器巡检页面内的
<video>元素,并强制将其srcObject重定向至模拟流,确保全局生效。
- 猴子补丁 (Monkey Patching):拦截浏览器底层的多媒体请求,根据当前模式决定返回真实的设备流还是自定义的 Canvas 流。
- 帧绘制循环 (Frame Blitting):使用
requestAnimationFrame驱动,在极低延迟下将选中的<video>标签帧数据绘制到主 Canvas 上。 - 流分发:所有的劫持请求共享同一个输出 Canvas,通过单向数据流减少内存占用和 CPU 消耗。
- 注入脚本:
- 将
camera-mock.js中的代码作为浏览器书签(Bookmarklet)保存。 - 在需要模拟摄像头的页面点击该书签,或直接在开发者控制台(Console)中粘贴运行。
- 将
- 加载视频:
- 在弹出的控制面板中,分别为“正面”、“向左”、“向右”三个位置选择对应的本地视频文件(支持 mp4, webm 等)。
- 切换模式:
- 将模式从“真实”切换为“注入”。
- 点击“切到此”按钮激活对应的视频流。
- 辅助控制:
- 水平镜像:模拟前置摄像头效果。
- 后置优先:强制模拟移动端后置摄像头参数。
- 暂停/黑屏:实时控制流的输出状态。
- 预览流:在面板内查看当前正在输出的模拟画面。
- 本工具仅供本地学习、开发测试及合规的自动化调试使用。
- 建议使用最新版本的 Chrome 或 Safari 浏览器以获得最佳的
captureStream支持。
开发者:ongwu
电子邮箱:ongwu007@gmail.com