1.认识 AVCapture 系列
AVCapture 系列是 AVFoundation 框架为我们提供的用于管理输入设备、采集、输出、预览等一系列接口,其工作原理如下:
![](https://img-blog.csdnimg.cn/img_convert/1d60ce74247325be901b86337ae6bf0a.webp?x-oss-process=image/format,png)
\1. AVCaptureDevice: 信号采集硬件设备(摄像头、麦克风、屏幕等)AVCaptureDevice 代表硬件设备,并且为 AVCaptureSession 提供 input,要想使用 AVCaptureDevice,应该先将设备支持的 device 枚举出来, 根据摄像头的位置( 前置或者后置摄像头 )获取需要用的那个摄像头, 再使用;如果想要对 AVCaptureDevice 对象的一些属性进行设置,应该先调用 lockForConfiguration: 方法, 设置结束后,调用 unlockForConfiguration 方法;
[self.device lockForConfiguration:&error];
// 设置 ***
[self.device unlockForConfiguration];
2. AVCaptureInput: 输入数据管理
AVCaptureInput 继承自 NSObject,是向 AVCaptureSession 提供输入数据的对象的抽象超类;要将 AVCaptureInput 对象与会话 AVCaptureSession 关联,需要 AVCaptureSession实例调用 -addInput: 方法。由于 AVCaptureInput 是个抽象类,无法直接使用,所以我们一般使用它的子类类管理输入数据。我们常用的 AVCaptureInput 的子类有三个:
![](https://img-blog.csdnimg.cn/img_convert/3b929318a92ae18cb4db11509f41c84a.webp?x-oss-process=image/format,png)
AVCaptureDeviceInput:用于从 AVCaptureDevice 对象捕获数据;AVCaptureScreenInput:从 macOS 屏幕上录制的一种捕获输入;AVCaptureMetadataInput:它为 AVCaptureSession 提供 AVMetadataItems。
3. AVCaptureOutput:输出数据管理
AVCaptureOutput 继承自 NSObject,是输出数据管理,该对象将会被添加到会话AVCaptureSession中,用于接收会话AVCaptureSession各类输出数据; AVCaptureOutput提供了一个抽象接口,用于将捕获输出数据(如文件和视频预览)连接到捕获会话AVCaptureSession的实例,捕获输出可以有多个由AVCaptureConnection对象表示的连接,一个连接对应于它从捕获输入(AVCaptureInput的实例)接收的每个媒体流,捕获输出在首次创建时没有任何连接,当向捕获会话添加输出时,将创建连接,将该会话的输入的媒体数据映射到其输出,调用AVCaptureSession的-addOutput:方法将AVCaptureOutput与AVCaptureSession关联。AVCaptureOutput 是个抽象类,我们必须使用它的子类,常用的 AVCaptureOutput的子类如下所示:
![](https://img-blog.csdnimg.cn/img_convert/05c57c89cfea5995bbc22f006e19939e.webp?x-oss-process=image/format,png)
AVCaptureAudioDataOutput:一种捕获输出,用于记录音频,并在录制音频时提供对音频样本缓冲区的访问;AVCaptureAudioPreviewOutput :一种捕获输出,与一个核心音频输出设备相关联、可用于播放由捕获会话捕获的音频;AVCaptureDepthDataOutput :在兼容的摄像机设备上记录场景深度信息的捕获输出;AVCaptureMetadataOutput :用于处理捕获会话 AVCaptureSession 产生的定时元数据的捕获输出;AVCaptureStillImageOutput:在macOS中捕捉静止照片的捕获输出。该类在 iOS 10.0 中被弃用,并且不支持新的相机捕获功能,例如原始图像输出和实时照片,在 iOS 10.0 或更高版本中,使