用途:为 iPhone Duo 的双前置摄像头(外屏超广角与内屏屏下超广角)构建相机采集逻辑。核心难点是“前置”不再等于“朝向用户”,需按实际朝向选择摄像头。
主要能力与策略:一是虚拟前置摄像头,用 AVCaptureDevice.DiscoverySession 请求 .front 加 Wide 或 Ultra Wide 即可解析到,自动在内屏/外屏摄像头间切换,无需切换代码,但仅暴露两者共有能力:最高 1080p、60 fps、无深度。二是独立摄像头,通过内置外屏超广角与内置内屏超广角设备类型分别访问:内屏最高 1080p@60fps、支持深度;外屏最高 4K@120fps、支持深度,但需自行在开合时切换。
朝向判断:AVCaptureDevice 的 position 只描述硬件位置,两个前置摄像头都报 .front,无法说明相对 UI 的朝向。使用 AVKit 中的 AVCaptureDeviceDirectionCoordinator,由 UIView、要监控的设备类型和变更处理器构建,按视图所在显示屏报告朝向;双屏同时驱动时每个视图各建一个。它隔离在主 actor,处理器不得直接调用 AVFoundation API,且不返回 AVCaptureDevice,而是 AVCaptureDeviceDirectionMap,含 forwardFacingDeviceDescriptors 与 backwardFacingDeviceDescriptors 两个数组,也可随时读 deviceDirections。跨 actor 传递用 AVCaptureDeviceDescriptor(含 uniqueID、localizedName、deviceType、mediaTypes、position),在相机 actor 内再构造设备。处理器需重配 AVCaptureSession、按朝向而非位置重定镜像、更新 UI,并注意可能不止一个前向摄像头。
预览与旋转:用 AVCaptureVideoPreviewLayer 的 videoGravity 控制留白或铺满;超广角前置可设 dynamicAspectRatio 利用方形传感器。采用 AVCaptureDeviceRotationCoordinator 保持预览与拍摄方向正确,随后关闭传感器方向补偿。方向与旋转是两个独立协调器。
限制与检查项:需基于 iOS 27.1 SDK 构建;在 Device Hub 中测试开、合、翻转;可考虑 CameraCaptureAccessory 让被摄者在外屏看到画面。具体 API 细节以 Apple 官方文章为准。