苹果在AVFoundation的设计上一如既往优雅。
Capture Basics摄像头、麦克风、屏幕等作为输入源,文件、Raw Buffer等作为输出源,另外还有两种特别的输出源:
- AVCaptureVideoPreviewLayer 视频预览。它是一个CALayer,因此你可以把它放到任意一个界面中,同时也支持Core Animation的操作
- AVCaptureAudioPreviewOutput 音频预览。我理解它是扬声器Output,从这个output获取到 AVCaptureAudioChannelInternal,就能得到当前声音的能量。
AVCaptureSession是整个Capture的核心。从上图可知,AVCaptureSession能有多个输入&输出。类似于RunLoop,它不断的从输入源获取数据,然后分发给各个输出源。
输入源有自己的硬件参数可以设置流控,输出源作为一个被动接受对象,它并没有太多流控设置,苹果巧妙的引入AVCaptureConnections。
Using AVCaptureConnections打个比方,我们要控制蓄水池里面的水位。正确做法不是等水满了后把水放掉,而是换一个小点的入水管。AVCaptureConnections就是Session和Output中间的控制节点。每个Output与Session建立连接后,都会分配一个默认的AVCpatureConnection。我们很多实时数据,也都是从connection得到的。
我写了个摄像头截图的小Demo,有兴趣的拿去不谢
AVCapturePreview
参考资料
网友评论