用途
该技能是 Meta Wearables DAT iOS SDK 的相机串流实现指南,帮助开发者在 iOS 应用中连接智能眼镜,启动视频串流、接收视频帧并进行静态照片拍摄。文档同时说明配套的 PCM 音频串流应参考 audio-streaming 技能。
核心概念
- DeviceSession:与眼镜的连接。需先创建并启动,即使未挂载相机也可保持连接。
- Camera:通过
addCamera(config:)挂载到已启动的 DeviceSession 上的能力,持有 Stream。 - Stream:即
camera.stream,负责启停串流、拍照、观察帧、状态与错误。 - VideoFrame:单帧视频,可用
.makeUIImage()渲染,或取.sampleBuffer获取原始 CMSampleBuffer(例如写入压缩帧到文件)。 - StreamConfiguration:配置视频编解码器、分辨率与帧率。
- PhotoData:从眼镜拍摄的静态图像(
.data加.format)。
文档建议像 CameraAccess 示例那样,把“启动会话”和“启动预览”当作两个独立的用户可见步骤,这样用户停止并重启预览时会话仍可复用。
主要能力与使用方式
创建会话:使用 Wearables.shared 与 AutoDeviceSelector(或针对特定设备的 SpecificDeviceSelector)创建并启动 DeviceSession,再通过 deviceSession.stateStream() 等待进入 .started 状态。
申请权限与挂载相机:先调用 checkPermissionStatus(.camera) 静默查询;如需请求权限,requestPermission(.camera) 会跳转到 Meta AI 应用,示例中仅在用户确认后再调用,避免突然跳转。随后以 StreamConfiguration 挂载相机,注意会话必须处于 started 状态。
分辨率:.high 为 720×1280,.medium 为 504×896,.low 为 360×640。
帧率:frameRate 为 UInt,有效值 2、7、15、24、30 FPS。
编解码器:.raw 为已解码帧,可直接渲染;.hvc1 为压缩 HEVC 帧,适合直写文件,但屏幕预览需自行解码 sampleBuffer。StreamConfiguration() 默认使用 .raw、.medium 与 30 FPS。
状态与帧监听:StreamState 依次为 stopping → stopped → waitingForDevice → starting → streaming → paused;通过 statePublisher、videoFramePublisher、errorPublisher 监听状态、帧与错误,错误值包括 .permissionDenied、.deviceNotConnected、.hingesClosed、.thermalHot、.batteryLow、.photoCaptureFailed 等,建议直接展示 error.localizedDescription。监听令牌需保持存活,可用 ListenerTokenBag 与 AnyListenerToken.store(in:) 管理,结束时调用 clear()。
启停:stream.start() 启动串流;camera.stop() 停止相机并级联停止其串流子节点、从会话卸载相机,之后可重新 addCamera();全部能力使用完毕后调用 deviceSession.stop()。拆卸级联方向为父到子,而非子到父。
串流中拍照:这是视频串流期间的轻量拍照路径。监听 photoDataPublisher 获取照片数据(格式为 .jpeg 或 .heic),调用 capturePhoto(format:) 触发,返回 Bool,false 表示未开始拍摄(例如已有一次拍摄正在进行),此时不会收到照片事件。如需独立的高质量拍摄(含分辨率、质量、传输进度与独立生命周期),应使用 camera-capture 技能。
带宽与画质
分辨率与帧率受蓝牙经典带宽限制。带宽受限时 SDK 会自动降低画质:先降分辨率(如高→中),再降帧率(如 30→24),且帧率不低于 15 FPS。文档建议请求较低设置以获得更高的单帧画质。
适用场景与限制
适用于在 iOS 应用中为 Meta 智能眼镜实现实时视频预览、视频帧处理与串流中抓拍。限制包括:相机必须挂载在已启动的会话上;分辨率与帧率受蓝牙带宽约束;拍照模式区分轻量串流内拍照与独立高质量拍照;HVC1 模式下屏幕预览需自行解码。文档另提供 Stream API 参考、StreamConfiguration API 参考与集成指南链接。