AVCapture架构探索

苹果在AVFoundation的设计上一如既往优雅。

AVCapture架构探索_第1张图片
Capture Basics

摄像头、麦克风、屏幕等作为输入源,文件、Raw Buffer等作为输出源,另外还有两种特别的输出源:

  1. AVCaptureVideoPreviewLayer 视频预览。它是一个CALayer,因此你可以把它放到任意一个界面中,同时也支持Core Animation的操作
  2. AVCaptureAudioPreviewOutput 音频预览。我理解它是扬声器Output,从这个output获取到 AVCaptureAudioChannelInternal,就能得到当前声音的能量。

AVCaptureSession是整个Capture的核心。从上图可知,AVCaptureSession能有多个输入&输出。类似于RunLoop,它不断的从输入源获取数据,然后分发给各个输出源。

输入源有自己的硬件参数可以设置流控,输出源作为一个被动接受对象,它并没有太多流控设置,苹果巧妙的引入AVCaptureConnections。

AVCapture架构探索_第2张图片
Using AVCaptureConnections

打个比方,我们要控制蓄水池里面的水位。正确做法不是等水满了后把水放掉,而是换一个小点的入水管。AVCaptureConnections就是Session和Output中间的控制节点。每个Output与Session建立连接后,都会分配一个默认的AVCpatureConnection。我们很多实时数据,也都是从connection得到的。

我写了个摄像头截图的小Demo,有兴趣的拿去不谢
AVCapturePreview


参考资料

  • WWDC 2011 - Session 417 Introducing AV Foundation Capture For Lion

你可能感兴趣的:(AVCapture架构探索)