一.基本概念
感谢http://www.jianshu.com/p/f7146092e640等博主的技术分享。
AVCaptureSession:媒体(音、视频)捕获会话,负责把捕获的音视频数据输出到输出设备中。一个AVCaptureSession可以有多个输入输出。它用于协调输入与输出之间的数据流。
AVCaptureDevice:输入设备,包括麦克风、摄像头,通过该对象可以设置物理设备的一些属性(例如相机聚焦、白平衡等),也就是物理输入设备,例如摄像头与麦克风。
AVCaptureDeviceInput:设备输入数据管理对象,可以根据AVCaptureDevice创建对应的AVCaptureDeviceInput对象,该对象将会被添加到AVCaptureSession中管理。代表了AVCaptureDevice采集的输入数据源。
AVCaptureOutput:输出数据管理对象,用于接收各类输出数据,通常使用对应的子类,其代表了输出数据源。
AVCaptureAudioDataOutput、
AVCaptureStillImageOutput、
AVCaptureVideoDataOutput、
AVCaptureFileOutput,
该对象将会被添加到AVCaptureSession中管理。注意:前面几个对象的输出数据都是NSData类型,而AVCaptureFileOutput代表数据以文件形式输出,类似的,AVCcaptureFileOutput也不会直接创建使用,通常会使用其子类:AVCaptureAudioFileOutput、
AVCaptureMovieFileOutput。
AVCaptureVideoPreviewLayer:相机拍摄预览图层,是CALayer的子类,使用该对象可以实时查看拍照或视频录制效果,创建该对象需要指定对应的AVCaptureSession对象
使用AVFoundation拍照和录制视频的一般步骤:
(1)创建AVCaptureSession对象。
(2)使用AVCaptureDevice的静态方法获得需要使用的设备,例如拍照和录像就需要获得摄像头设备,录音就要获得麦克风设备。
(3)利用输入设备AVCaptureDevice初始化AVCaptureDeviceInput对象。
(4)初始化输出数据管理对象,如果要拍照就初始化AVCaptureStillImageOutput对象;如果拍摄视频就初始化AVCaptureMovieFileOutput对象。
(5)将数据输入对象AVCaptureDeviceInput、数据输出对象AVCaptureOutput添加到媒体会话管理对象AVCaptureSession中。
(6)创建视频预览图层AVCaptureVideoPreviewLayer并指定媒体会话,添加图层到 显示容器中,调用AVCaptureSession的startRuning方法开始捕获。
(7)将捕获的音频或视频数据输出到指定文件。