iOS媒体捕捉
一、捕捉类介绍
捕捉会话AVCaptureSession
AV Foundation捕捉栈的核心类是AVCaptureSession,这个类相当与一个插排,用于连接输入和输出资源,
捕捉会话还可以额外配置一个会话预设值(session preset)用来控制捕捉数据的格式和质量
捕捉设备AVCaptureDevice
AVCaptureDevice为摄像头或麦克风等物理设备定义了一个接口,它针对物理硬件设备定义了大量的控制
//根据媒体类型返回一个系统指定的默认设备 AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
捕捉设备的输入AVCaptureDeviceInput
AVCaptureDevice不能之间介入会话,需要借助AVCaptureDeviceInput实例来封装一下
NSError *error = nil; AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
捕捉的输出AVCaptureOutput
AVCaptureOutput是一个抽象基类,AVFoundation定义了一些这个抽象类的高级拓展类
- AVCaptureStillImageOutput:静态图片输出
- AVCaptureMovieFileOutput:视频输出
- AVCaptureVideoDataOutput:视频数据输出
- AVCaptureAudioDataOutput:音频数据输出
捕捉连接AVCaptureConnection
捕捉会话需要确定有给定捕捉设备输入渲染的媒体类型,并自动建立其能够接收该媒体类型的捕捉输出端的连接。
捕捉预览AVCaptureVideoPreviewLayer
AVCaptureVideoPreviewLayer可以预览正在捕捉的画面
二、创建捕捉
创建捕捉的步骤
- 创建一个一个AVCaptureSession
- 获取一个AVCaptureDevice
- 为AVCaptureDevice创建一个AVCaptureDeviceInput
- 将AVCaptureDeviceInput添加到AVCaptureSession
- 创建一个AVCaptureDeviceOutPut
- 将AVCaptureDeviceOutPut添加到AVCaptureSession
AVCaptureSession开始捕捉
- 配置会话
- (BOOL)setupSession { //设置session self.session = [[AVCaptureSession alloc] init]; if([self.session canSetSessionPreset:AVCaptureSessionPresetMedium]){ self.session.sessionPreset = AVCaptureSessionPresetMedium; } //设置视频输入设备 _videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; _videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:_videoDevice error:nil]; if(_videoDeviceInput){ if([self.session canAddInput:_videoDeviceInput]){ [self</