关于....AVCaptureSession

之所以把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可不仅仅只是视频,为啥要用它来初始化呢?

 

 

猜你喜欢

转载自weiqingfei.iteye.com/blog/2213964