ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Baguette虚拟相机:把Mac摄像头或视频文件喂给iOS模拟器相机

Baguette虚拟相机:把Mac摄像头或视频文件喂给iOS模拟器相机 Baguette虚拟相机把Mac摄像头或视频文件喂给iOS模拟器相机【免费下载链接】baguetteHeadless control for Apples Simulators — 3D models, taps, swipes, multi-finger gestures, 60 fps streaming, and a multi-device farm项目地址: https://gitcode.com/gh_mirrors/baguette/baguetteBaguette 是一款面向 iOS 模拟器的无头控制工具它的虚拟相机功能可以把 Mac 摄像头、图片文件或循环视频喂给模拟器里 iOS 应用的相机——扫码应用能扫、头像上传能用、取景框有画面全程不用打开 Xcode也不用额外安装菜单栏应用。虚拟相机解决了什么问题 iOS 模拟器本身没有可用的相机硬件依赖AVCaptureSession的应用在模拟器里只能显示相机不可用在没有摄像头的 Mac 上应用连设备发现都拿不到直接卡在权限/加载界面想反复测试条码扫描、拍照上传、实时取景却只能一台真机对着屏幕拍。Baguette 的虚拟相机把一帧帧画面写进一块共享内存缓冲区再让模拟器里的应用以为那是真相机。对应用来说注入是透明的预览层、拍照回调、图片选择器全部正常工作。适合场景测试 expo-camera / VisionCamera 等相机库、验证扫码流程、给头像上传功能喂固定素材做 UI 回归。快速上手3 步把摄像头接进模拟器虚拟相机没有单独的 CLI 命令入口是baguette serve网页里的Camera 卡片也有一条 WebSocket 供自动化脚本驱动启动网页控制台baguette serve # 打开 http://127.0.0.1:8421/simulators在设备页选择相机源并 Start进入http://127.0.0.1:8421/simulators/UDID在侧边栏的 Camera 折叠区里选择来源类型Webcam / Image / Video、指定摄像头设备或上传文件点击Start。同一张卡片上还能随时调整Fit/Fill画面适配、Mirror镜像并查看实时 FPS。重新启动目标应用⚠️ 这是最容易踩的一步动态库只在应用启动时被加载。Start 之后请点图标重开应用或执行xcrun simctl launch udid bundle-id。Start 之前就在运行的应用不会获得相机Metro 的 JS 热重载也不算必须重启原生进程。点Stop后会解除注入disarm之后启动的应用不再加载虚拟相机若清理失败卡片会显示Retry stop并保留错误信息需要先成功 Stop 才能启动下一个源。三种相机源摄像头、图片、视频来源说明典型用例Webcam实时使用 Mac 摄像头FaceTime HD、USB 摄像头、连续互通相机均可连接时自动列出设备真人扫码、实时取景Image上传一张图片png/jpg/heic 等服务端按 ~30 fps 不断重放固定二维码、头像上传素材Video上传视频mov/mp4/m4v用AVAssetReader循环播放录制片段回放、动效测试图片/视频不需要在指令里传路径浏览器先把文件上传到服务端为这台设备预留的暂存槽位POST /simulators/:udid/camera-source之后camera_start只需要说明来源类型服务端自己读文件。浏览器端卡片逻辑见 sim-camera.js。工作原理共享缓冲区 动态库注入整个方案分成 Mac 端和模拟器端两半完整设计见 design.mdMac 端SwiftCameraSession编排器根据来源选择生产者——AVCameraCapture摄像头、ImageFileCapture静态图重放或VideoFileCapture视频循环把 BGRA 帧写入 mmap 文件/tmp/SimCam.bgra。模拟器端Objective-C 动态库VirtualCamera 通过DYLD_INSERT_LIBRARIES注入到每台模拟器的每个应用钩住 AVFoundation用共享缓冲区里的帧替换不存在的硬件相机。关键细节来源无关dylib 只认缓冲区里的帧图片/视频/摄像头对它完全等价所以新增来源不需要改动动态库无摄像头 Mac 也能用动态库还会伪造整个采集图假的AVCaptureDevice、dummy input、30 fps 定时器构造样本缓冲让没装相机驱动的 Mac 上的应用也拿到正常设备onCameraReady回调照常触发共享注入变量Baguette 的 motion 功能也用同一个DYLD_INSERT_LIBRARIES开启相机不会覆盖 motion 已注入的库反之亦然Stop 时自动解除注入状态只存在于流媒体期间Stop 后新启动的应用不会再被注入避免了同类工具重启模拟器才恢复的顽疾。常见坑与排错清单 ✅现象原因与解法应用里看不到画面应用是 Start之前启动的 → 杀掉并重启应用想给第二台设备也开相机每台主机同一时间只能喂一路相机都写/tmp/SimCam.bgra服务端会拒绝第二个连接Stop 后报清理失败页面出现Retry stop重连同一设备并显式发送camera_stop清理成功前其他设备保持阻塞视频是侧着的视频按编码方向输出帧旋转元数据暂不处理looping 和填充正常扫不到码帧数据正常到达但不合成条码元数据依赖AVCaptureMetadataOutput的扫描逻辑不会命中视频没声音相机通道只传画面音轨被忽略该功能已在 iOS 26 expo-camera 57 上验证通过模拟私有格式访问器意味着未来 iOS 版本可能需要更新垫片详见 camera 文档。关键源码与文档导读 功能总览与排错docs/features/camera/README.md完整设计缓冲区布局、钩子清单、iOS 26 动态库陷阱docs/features/camera/design.md会话编排CameraSession.swift · 三种来源基类CameraCapture.swift · 视频循环VideoCapture.swift注入动态库源码Injected/VirtualCamera/预编译产物在 Resources/VirtualCamera/网页卡片实现sim-camera.js自动化测试示例camera-cleanup.test.js、AVCameraCaptureTests.swift写在最后Baguette 虚拟相机把模拟器没有相机这个老难题变成了网页上的一个卡片选来源、点 Start、重启应用Mac 摄像头或任意视频文件就成了 iOS 应用眼里货真价实的相机。如果你在做相机功能测试、扫码流程自动化或多设备农场它是目前无需 Xcode 就能完成这条链路的最省事方案之一。【免费下载链接】baguetteHeadless control for Apples Simulators — 3D models, taps, swipes, multi-finger gestures, 60 fps streaming, and a multi-device farm项目地址: https://gitcode.com/gh_mirrors/baguette/baguette创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表