AVCaptureOutput 继承 NSObject
,是输出数据管理。该对象将会被添加到会话AVCaptureSession
中,用于接收会话AVCaptureSession
各类输出数据。
AVCaptureOutput
提供了一个抽象接口,用于将捕获输出数据(如文件和视频预览)连接到捕获会话AVCaptureSession
的实例。捕获输出可以有多个由AVCaptureConnection
对象表示的连接,一个连接对应于它从捕获输入(AVCaptureInput
的实例)接收的每个媒体流。捕获输出在首次创建时没有任何连接。当向捕获会话添加输出时,将创建连接,将该会话的输入的媒体数据映射到其输出。
调用AVCaptureSession
的-addOutput:
方法将AVCaptureOutput
与AVCaptureSession
关联。
1、访问连接 AVCaptureConnection
//AVCaptureOutput的连接
@property(nonatomic, readonly) NSArray<AVCaptureConnection *> *connections;
//返回 connections 数组中具有指定媒体类型的输入端口的第一个连接,如果未找到与指定媒体类型的连接,则为nil。
- (AVCaptureConnection *)connectionWithMediaType:(AVMediaType)mediaType;
2、坐标系间转换
AVCaptureMetadataOutput
对象的兴趣矩形位于一个坐标系中,相对于设备的自然方向该坐标系从左上角的(0,0)扩展到右下角的(1,1)。AVCaptureOutput
使用像素坐标空间,可以缩放、旋转或镜像。使用下面方法在坐标空间之间快速转换。
2.1、坐标系转换
将AVMetadataObject
的视觉属性转换为接收器的坐标。
- (AVMetadataObject *)transformedMetadataObjectForMetadataObject:(AVMetadataObject *)metadataObject
connection:(AVCaptureConnection *)connection;
此方法将提供的AVMetadataObject
的坐标空间中的视觉属性转换为接收器的坐标空间。转换考虑了方向、镜像、缩放,并改变所提供的AVMetadataObject
的可视属性,以匹配接收器通过指示的连接提供的样本缓冲区的物理旋转和镜像。
这意味着对于AVCaptureVideoDataOutput
,调整的元数据对象坐标将被旋转和反射(镜像)。而AVCaptureStillImageOutput
和AVCaptureMovieFileOutput
则不是,在回放时确定这两种类型的输出的元数据对象坐标的旋转和反射(镜像)。
2.2、坐标系转换
将AVCaptureOutput
的坐标系中的坐标转换为用于AVCaptureMetadataOutput
的坐标系中的坐标。
- (CGRect)metadataOutputRectOfInterestForRect:(CGRect)rectInOutputCoordinates;
- 参数
rectInOutputCoordinates
:AVCaptureOutput
坐标系中的坐标。 - 返回值:
AVCaptureMetadataOutput
坐标系中的坐标。
2.3、坐标系转换
将AVCaptureMetadataOutput
的坐标系中的坐标转换为AVCaptureOutput
的坐标系中的坐标。
- (CGRect)rectForMetadataOutputRectOfInterest:(CGRect)rectInMetadataOutputCoordinates;
- 参数
rectInMetadataOutputCoordinates
:AVCaptureMetadataOutput
坐标系中的坐标。 - 返回值:
AVCaptureOutput
对象坐标系中的坐标。
3、AVCaptureOutput
的一系列子类
AVCaptureOutput
是个抽象类,我们必须使用它的子类;常用的AVCaptureOutput
的子类如下所示:
-
AVCaptureAudioDataOutput
:一种捕获输出,用于记录音频,并在录制音频时提供对音频样本缓冲区的访问。 -
AVCaptureAudioPreviewOutput
:一种捕获输出,与一个核心音频输出设备相关联、可用于播放由捕获会话捕获的音频。 -
AVCaptureDepthDataOutput
:在兼容的摄像机设备上记录场景深度信息的捕获输出。 -
AVCaptureMetadataOutput
:用于处理捕获会话AVCaptureSession
产生的定时元数据的捕获输出。 -
AVCaptureStillImageOutput
:在macOS中捕捉静止照片的捕获输出。该类在iOS 10.0中被弃用,并且不支持新的相机捕获功能,例如原始图像输出和实时照片。在iOS 10.0或更高版本中,使用AVCapturePhotoOutput
类代替。 -
AVCapturePhotoOutput
:静态照片、动态照片和其他摄影工作流的捕获输出。 -
AVCaptureVideoDataOutput
:记录视频并提供对视频帧进行处理的捕获输出。 -
AVCaptureFileOutput
:用于捕获输出的抽象超类,可将捕获数据记录到文件中。 -
AVCaptureMovieFileOutput
:继承自AVCaptureFileOutput
,将视频和音频记录到QuickTime电影文件的捕获输出。 -
AVCaptureAudioFileOutput
:继承自AVCaptureFileOutput
,记录音频并将录制的音频保存到文件的捕获输出。