Camera Capture(iOS)是 Meta Wearables DAT iOS 提供的实验性独立高质量拍照能力,对应 camera.photo 路径。官方说明它与 stream.capturePhoto 不同:后者在视频流保持激活的情况下拍照,而本功能走独立的拍照流程,不依赖正在进行的视频流。
用途与前提 该功能用于从已连接的智能眼镜拍摄单张高质量照片。使用前需要满足两项权限条件:在 Wearables Developer Center 中为应用获得 Camera 批准,并具备 .camera 权限;.camera 应在 DeviceSession 启动之后再添加。由于 Stream 与独立 Photo 会竞争摄像头硬件,启动 Photo 前必须停止活跃的 Stream。
主要能力与使用方式 使用时先通过 session.addCamera(config: StreamConfiguration()) 添加相机并取得 camera.photo 实例,然后注册所需的数据发布者(publisher),再调用 photo.start()。需要等待 Photo 状态进入 .started 后,才能请求拍照。示例代码为:
guard let camera = try session.addCamera(config: StreamConfiguration()) else { return } let photo = camera.photo let photoTokens = ListenerTokenBag()
photo.photoDataPublisher.listen { capture in Task { @MainActor in updatePhotoPreview(capture.imageData, metadata: capture.metadata) } }.store(in: photoTokens)
photo.start()
进入 .started 后,调用 photo.capturePhoto(resolution: .full, quality: .high),按需指定分辨率与质量。拍照是异步的,图像数据通过 photoDataPublisher 送达;可通过 transferProgressPublisher 观察传输进度,通过 errorPublisher 观察失败。分辨率与质量越高,处理与传输耗时越长。
错误与清理 在 .started 之前调用拍照会发布 PhotoError.notReady;初始化与拍照失败通过 errorPublisher 返回。需要在图像送达完成前保持 Photo 与 photoTokens 存活,送达后停止 Photo、清空 token bag,并停止 Camera。photo.stop() 使 Photo 回到 .stopped 后,同一个 camera.photo 实例可以再次通过 photo.start() 重启;停止 Camera 或父 session 也会停止其子对象。
测试 在请求拍照前,可用 MockDeviceKit 的 glasses.services.cameraCapture.setCapturedPhoto(fileURL:) 配置下一张返回图像,或用 simulateCaptureFailure() 模拟一次性失败。
适用场景与限制 该功能适合需要从智能眼镜获取单张高质量照片的开发与 Beta 测试场景。限制在于:Standalone Camera Capture 目前为实验性功能,应用可用于开发与 Beta 测试,但尚不能发布到生产发布渠道;同时需遵守 Camera 权限申请与 Stream 互斥的要求。