一.基本概念
感謝http://www.itdecent.cn/p/f7146092e640等博主的技術(shù)分享。
AVCaptureSession:媒體(音、視頻)捕獲會話,負(fù)責(zé)把捕獲的音視頻數(shù)據(jù)輸出到輸出設(shè)備中。一個AVCaptureSession可以有多個輸入輸出。它用于協(xié)調(diào)輸入與輸出之間的數(shù)據(jù)流。
AVCaptureDevice:輸入設(shè)備,包括麥克風(fēng)、攝像頭,通過該對象可以設(shè)置物理設(shè)備的一些屬性(例如相機(jī)聚焦、白平衡等),也就是物理輸入設(shè)備,例如攝像頭與麥克風(fēng)。
AVCaptureDeviceInput:設(shè)備輸入數(shù)據(jù)管理對象,可以根據(jù)AVCaptureDevice創(chuàng)建對應(yīng)的AVCaptureDeviceInput對象,該對象將會被添加到AVCaptureSession中管理。代表了AVCaptureDevice采集的輸入數(shù)據(jù)源。
AVCaptureOutput:輸出數(shù)據(jù)管理對象,用于接收各類輸出數(shù)據(jù),通常使用對應(yīng)的子類,其代表了輸出數(shù)據(jù)源。
AVCaptureAudioDataOutput、
AVCaptureStillImageOutput、
AVCaptureVideoDataOutput、
AVCaptureFileOutput,
該對象將會被添加到AVCaptureSession中管理。注意:前面幾個對象的輸出數(shù)據(jù)都是NSData類型,而AVCaptureFileOutput代表數(shù)據(jù)以文件形式輸出,類似的,AVCcaptureFileOutput也不會直接創(chuàng)建使用,通常會使用其子類:AVCaptureAudioFileOutput、
AVCaptureMovieFileOutput。
AVCaptureVideoPreviewLayer:相機(jī)拍攝預(yù)覽圖層,是CALayer的子類,使用該對象可以實(shí)時查看拍照或視頻錄制效果,創(chuàng)建該對象需要指定對應(yīng)的AVCaptureSession對象
使用AVFoundation拍照和錄制視頻的一般步驟:
(1)創(chuàng)建AVCaptureSession對象。
(2)使用AVCaptureDevice的靜態(tài)方法獲得需要使用的設(shè)備,例如拍照和錄像就需要獲得攝像頭設(shè)備,錄音就要獲得麥克風(fēng)設(shè)備。
(3)利用輸入設(shè)備AVCaptureDevice初始化AVCaptureDeviceInput對象。
(4)初始化輸出數(shù)據(jù)管理對象,如果要拍照就初始化AVCaptureStillImageOutput對象;如果拍攝視頻就初始化AVCaptureMovieFileOutput對象。
(5)將數(shù)據(jù)輸入對象AVCaptureDeviceInput、數(shù)據(jù)輸出對象AVCaptureOutput添加到媒體會話管理對象AVCaptureSession中。
(6)創(chuàng)建視頻預(yù)覽圖層AVCaptureVideoPreviewLayer并指定媒體會話,添加圖層到 顯示容器中,調(diào)用AVCaptureSession的startRuning方法開始捕獲。
(7)將捕獲的音頻或視頻數(shù)據(jù)輸出到指定文件。