之所以把AVCaptureSession放到标题,应该是因为这东西是所有设备的管理器吧。
AVCaptureSession管理一个输入,一个输出。
输入的话比较简单,就是一个
- AVCaptureDeviceInput
输入出比较多了,大概有以下多种
- AVCaptureAudioDataOutput
- AVCaptureMovieFileOutput
- AVCaptureMetadataOutput
- AVCaptureStillImageOutput
- AVCaptureVideoDataOutput
对于输入的话,当然需要指定一个设备了,那就是用AVCaptureDevice,
由于输入设备也有很多种,所以初始化
AVCaptureDevice时,要指定是哪种了
class func defaultDeviceWithMediaType(_
mediaType
: String!) -> AVCaptureDevice!
好多阿
AVMediaTypeVideo
AVMediaTypeAudio
AVMediaTypeText
AVMediaTypeClosedCaption
AVMediaTypeSubtitle
AVMediaTypeTimecode
AVMediaTypeMetadata
AVMediaTypeMuxed
输出的话,根据输出类型不同,有各种各样的delegate了,在delegate里出力各种输出的数据。
把输入输入装配好,AVCaptureSession就像一台机器一样要启动了
AVCaptureSession.startRunning
当然能启动也必须能停啊
AVCaptureSession.stopRunning
另外当用户更改了输入或者输出配置时咋办呢?
AVCaptureSession给我们准备了两个方法
- beginConfiguration
- commitConfiguration
只要把更改放到这两个方法中间就可以啦,是不是很像pl/sql呢?
到现在为止,这一切都是在暗中进行的,用户啥也看不见啊。当然对于一些音频,看不见也就看不见吧,但是视频的话,必须要有个预览窗口吧。
这时候,就是该AVCaptureVideoPreviewLayer上场的时候了。
这个东西的初始化有点奇怪,因为它是由AVCaptureSession来初始化的,那么问题来了,AVCaptureSession可不仅仅只是视频,为啥要用它来初始化呢?