蘋果在AVFoundation的設(shè)計上一如既往優(yōu)雅锥咸。
攝像頭、麥克風(fēng)细移、屏幕等作為輸入源搏予,文件、Raw Buffer等作為輸出源弧轧,另外還有兩種特別的輸出源:
- AVCaptureVideoPreviewLayer 視頻預(yù)覽雪侥。它是一個CALayer,因此你可以把它放到任意一個界面中精绎,同時也支持Core Animation的操作
- AVCaptureAudioPreviewOutput 音頻預(yù)覽速缨。我理解它是揚聲器Output,從這個output獲取到 AVCaptureAudioChannelInternal代乃,就能得到當前聲音的能量旬牲。
AVCaptureSession是整個Capture的核心。從上圖可知搁吓,AVCaptureSession能有多個輸入&輸出原茅。類似于RunLoop,它不斷的從輸入源獲取數(shù)據(jù)堕仔,然后分發(fā)給各個輸出源擂橘。
輸入源有自己的硬件參數(shù)可以設(shè)置流控,輸出源作為一個被動接受對象摩骨,它并沒有太多流控設(shè)置贝室,蘋果巧妙的引入AVCaptureConnections。
打個比方仿吞,我們要控制蓄水池里面的水位。正確做法不是等水滿了后把水放掉捡偏,而是換一個小點的入水管唤冈。AVCaptureConnections就是Session和Output中間的控制節(jié)點。每個Output與Session建立連接后银伟,都會分配一個默認的AVCpatureConnection你虹。我們很多實時數(shù)據(jù),也都是從connection得到的彤避。
我寫了個攝像頭截圖的小Demo傅物,有興趣的拿去不謝
AVCapturePreview
參考資料