OC之输出管理 AVCaptureOutput

AVCaptureOutput 继承 NSObject,是输出数据管理。该对象将会被添加到会话AVCaptureSession中,用于接收会话AVCaptureSession各类输出数据。
AVCaptureOutput提供了一个抽象接口,用于将捕获输出数据(如文件和视频预览)连接到捕获会话AVCaptureSession的实例。捕获输出可以有多个由AVCaptureConnection对象表示的连接,一个连接对应于它从捕获输入(AVCaptureInput的实例)接收的每个媒体流。捕获输出在首次创建时没有任何连接。当向捕获会话添加输出时,将创建连接,将该会话的输入的媒体数据映射到其输出。
调用AVCaptureSession-addOutput:方法将AVCaptureOutputAVCaptureSession关联。

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,调整的元数据对象坐标将被旋转和反射(镜像)。而AVCaptureStillImageOutputAVCaptureMovieFileOutput则不是,在回放时确定这两种类型的输出的元数据对象坐标的旋转和反射(镜像)。

2.2、坐标系转换

AVCaptureOutput的坐标系中的坐标转换为用于AVCaptureMetadataOutput的坐标系中的坐标。

- (CGRect)metadataOutputRectOfInterestForRect:(CGRect)rectInOutputCoordinates;
  • 参数rectInOutputCoordinatesAVCaptureOutput坐标系中的坐标。
  • 返回值:AVCaptureMetadataOutput坐标系中的坐标。
2.3、坐标系转换

AVCaptureMetadataOutput的坐标系中的坐标转换为AVCaptureOutput的坐标系中的坐标。

- (CGRect)rectForMetadataOutputRectOfInterest:(CGRect)rectInMetadataOutputCoordinates;
  • 参数rectInMetadataOutputCoordinatesAVCaptureMetadataOutput坐标系中的坐标。
  • 返回值:AVCaptureOutput对象坐标系中的坐标。

3、AVCaptureOutput 的一系列子类

AVCaptureOutput是个抽象类,我们必须使用它的子类;常用的AVCaptureOutput的子类如下所示:

AVCaptureOutput继承关系.png
  • AVCaptureAudioDataOutput :一种捕获输出,用于记录音频,并在录制音频时提供对音频样本缓冲区的访问。
  • AVCaptureAudioPreviewOutput :一种捕获输出,与一个核心音频输出设备相关联、可用于播放由捕获会话捕获的音频。
  • AVCaptureDepthDataOutput :在兼容的摄像机设备上记录场景深度信息的捕获输出。
  • AVCaptureMetadataOutput :用于处理捕获会话AVCaptureSession产生的定时元数据的捕获输出。
  • AVCaptureStillImageOutput :在macOS中捕捉静止照片的捕获输出。该类在iOS 10.0中被弃用,并且不支持新的相机捕获功能,例如原始图像输出和实时照片。在iOS 10.0或更高版本中,使用AVCapturePhotoOutput类代替。
  • AVCapturePhotoOutput :静态照片、动态照片和其他摄影工作流的捕获输出。
  • AVCaptureVideoDataOutput :记录视频并提供对视频帧进行处理的捕获输出。
  • AVCaptureFileOutput :用于捕获输出的抽象超类,可将捕获数据记录到文件中。
  • AVCaptureMovieFileOutput :继承自AVCaptureFileOutput,将视频和音频记录到QuickTime电影文件的捕获输出。
  • AVCaptureAudioFileOutput :继承自AVCaptureFileOutput,记录音频并将录制的音频保存到文件的捕获输出。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容