核心类
AVCaptureSession
排插,用于建立输入、输出图的关系。
提供操作:
- 预设配置
- 增删查输入、输出
- 增删查连接
- 开始、停止运行
- 开始、提交配置
使用注意:
- 方法调用应在一个独立的串行队列中进行,以防止影响主线程和实现同步操作。
- 中断通过通知进行监听。
AVCaptureDevice
采集设备硬件功能的封装。
使用注意:
- 使用硬件功能时,需要判断该功能是否可用;
- 修改设备配置前,需要调用
lockForConfiguration
进行锁定,以防止外界修改;对应的修改完毕后,调用unlockForConfiguration
。
AVCaptureDeviceInput
采集设备作为输入的封装。需要封装成 Input 才能添加会话中。
使用注意:
- 切换设备其逻辑要包裹在AVCaptureSession的
beginConfiguration
和engdConfiguration
中,需要根据设备创建Input,先移除后添加。
AVCaptureOutput
抽象输出类,其根据实际的目标数据的需求会有对应的具体类。 + StillImageOutput:静态图片输出 + 图片输出配置 + 拍照操作 + MovieFileOutput:音视频文件输出 + 文件大小限制 + 录制开始和停止操作 + AudioFileOutput:音频文件输出 + 音频格式配置 + 元数据存取 + AudioDataOutput:原始音频帧输出 + 音频格式配置 + VideoDataOutput:原始音频帧输出 + 视频格式配置 + MetadataOutput:元数据输出,可以实现二维码、人脸识别 + DepthDataOutput:深度数据输出
提供connection获取和坐标转换。具体的类通过不同的代理异步输出数据。
AVCaptureConnection
建立输入和输出的连接,用于控制数据流。只要Input和Output都添加到Session,则可以直接向Output获取Connection。否则需要手动建立连接。
可配置与设备硬件无关的软件处理:videoOrientation、videoScaleAndCropFactor、videoMirroring、videoStabilization。其他的参数需要配置AVCaptureDevice。
AVCaptureVideoPreviewLayer
可直接关联(强引用)AVCaptureSession实现预览。
采集案例
摄像头坐标转换
AVCaptureVideoPreviewLayer 提供摄像头坐标和屏幕坐标的转换方法:
1 | // 屏幕坐标 -> 摄像头坐标 |
采集会话配置
- 创建 AVCaptureSession;
- 设置分辨率;
- 使用 AVCaptureDevice 方法获取其对应类型的对象;
- 为设备对象创建 Input;
- 判断会话能否添加该 Input(因为有可能其他应用在使用该设备),是则添加;可将设备对象/input 存到属性,以备切换设备时做判断。
- 创建 Output 对象,设置其格式。
- 判断+添加。可以添加多个 Output。
开始与停止就是调用 Running 相关的方法。