在iOS13.0开始支持多摄像头预览AVCaptureMultiCamSession,然后iOS15.0增加支持摄像头画中画预览。在使用之前,我们通过isMultiCamSupported()判断是否支持多Camera同时预览。
一、Camera架构
1、Camera流水线
Camera由AVCaptureDeviceInput、AVCaptureSession、AVCaptureOutput构成。如下图所示:
2、单Camera架构
单个Camera架构意味只有一个AVCaptureDeviceInput,同步输出VideoData和DepthData,支持预览和输出文件。如下图所示:
3、多Camera架构
与单Camera架构相比,多Camera架构包括多个输入源AVCaptureDeviceInput,多个摄像头同时预览,如下图所示:
二、Camera类图结构
Camera类图包括AVCaptureDeviceInput、AVCaptureMultiCamSession、AVCaptureVideoDataOutput、AVCaptureVideoPreviewLayer、AVAssetWriter。如下图所示:
三、Camera输入输出
Camera的输入包括:前置Camera、后置Camera、麦克风,输出包括:预览数据、图片、文件、Metadata,由AVCaptureMultiCamSession进行管理。如下图所示:
四、MultiCamera流同步
多个Camera同时预览,它们共享分辨率和帧率。也需要进行流同步,包括如下:
- 曝光
- 对焦
- 白平衡
五、降低功耗
iOS提供API获取硬件功耗:
var hardwareCost: Float { get } // 取值[0.0, 1.0]
同时提供API获取系统压力功耗:
var systemPressureCost: Float { get } // 取值[0.0, 1.0]
关于降低功耗的可行方案如下:
- 设置最大帧率
- 降低Camera分辨率
- 选择低精度像素格式