基於iOS8以上版本的AV Foundation框架特性之--AVCaptureDevice

AV Foundation框架介紹了一系列用於支持iOS8.0及以上版本的API。新特性包括Focus Pixels、光學圖像防抖動功能、1080p60、慢動做視頻、影院級視頻防抖動功能, 單鏡頭(視頻)HDR 以及視頻錄製過程當中拍攝高分辨率靜態照片。

除此以外, 還支持手動控制功能(包括手動對焦、手動曝光、曝光補償、手動白平衡以及托架性靜態捕捉)。這些特性可參考 WWDC 2014 Session 508 Camera Capture: Manual Controls.

Focus Pixels自動對焦
光學圖像防抖動
1080p60
240 fps慢動做視頻 
影院級視頻防抖動功能 
單鏡頭(視頻) HDR
視頻錄製過程當中拍攝高分辨率靜態照片 
文檔修訂記錄
Focus Pixels自動對焦
iPhone6 和iPhone6 Plus專用的Focus Pixels 技術可經過相位檢測來提供深度信息。 連續自動對焦變化很是快速和敏感。 當鏡頭作全焦點掃描時可達到徹底沒有震顫效果。相位檢測很是好,推薦你在錄製視頻的同時容許自動對焦。在光線很差的狀況下,AF機制可經過掃描來收集對比信息。 

若是硬件支持Focus Pixels ,那麼當你設置 AVCaptureDevice focusMode 的屬性值爲AVCaptureFocusModeContinuousAutoFocus時,這個功能是默認"開啓"的。所以當自動對焦可用時,它們會自動調用,無需手動選擇開啓或關閉。iPhone6 和iPhone 6 Plus的前置攝像頭都有一個固定的聚焦透鏡,所以Focus pixels自動對焦僅僅是針對於後置攝像頭而言的。全部的針對後置攝像頭的AVCaptureDeviceFormat對象都支持除了720p240格式的自動對焦。

您怎麼知道某個格式是使用了Focus pixels,仍是使用了傳統的反差式對焦,或者根本不支持任何對焦呢?

AVCaptureDeviceFormat的只讀屬性autoFocusSystem能夠解決這個問題。AVCaptureAutoFocusSystem 有3個常量:None、ContrastDetection以及PhaseDetection。當使用的格式支持相位檢測時,強烈推薦你容許相機在錄製時可以連續調整焦點,由於相位檢測很是快速且敏銳。當系統使用傳統反差檢測時,應該在錄製前鎖定對焦,或者在支持的前提下使用AVCaptureDevice的smoothAutofocusEnabled屬性。

注意:使用傳統的對比檢測自動對焦功能時,當對焦時,AVCaptureDevice的adjustingFocus屬性會變爲YES,並且當完成對焦後這個屬性就會變爲NO。當相位檢測自動對焦正在使用時,adjustingFocus屬性不轉爲YES,由於相位檢測每每會更頻繁地對焦,但它幾乎讓你感受不到它頻繁對焦了。能夠利用AVCaptureDevice lensPosition 屬性來觀察由相位檢測AF引發的透鏡移動變化。

請查看AVCaptureDevice.h-AVCaptureAutoFocusSystem和autoFocusSystem.

光學圖像防抖動功能

iPhone 6 Plus(只限6 Plus)的後置攝像頭支持光學圖像防抖動功能。默認配置中,該功能會在低光線狀況下,在你使用8百萬像素設備格式的AVCaptureStillImageOutput拍照時激活或者預先調整AVCaptureSessionPresetPhoto時激活。 在iOS7中,AV Foundation 使用了相同的屬性AVCaptureStillImageOutput automaticallyEnablesStillImageStabilizationWhenAvailable。這個屬性在所支持的平臺上(iPhone 5s、iPhone 6以及iPhone 6 Plus)默認爲YES。在iPhone 5s 和iPhone 6 上,數字圖像防抖動技術可減小低光線圖片的模糊強度。在iPhone6 Plus上,數字和光學圖像防抖動技術的結合能夠在光線度更低的狀況下達到更好的效果。

請查看AVCaptureOutput.h - automaticallyEnablesStillImageStabilizationWhenAvailable.

1080p60

iphone6和iPhone6 Plus的後置攝像頭有一個1080p30的AVCaptureDeviceFormat (420v / 420f) 和一個支持1080p60的格式。它能夠從最小2 fps 的幀速率增長到最大60 fps幀速率。AVCaptureSessionPresetHigh使用的是1080p30 格式。若是你想用1080p60 來記錄,請使用iOS7中的 AVCaptureDevice formats,找到你想使用的AVCaptureDeviceFormat,設置AVCaptureDevice setActiveFormat屬性值,而不是AVCaptureSession setSessionPreset。可回顧下WWDC 2013 Session 610 視頻"What's New in Camera Capture" 來學習這項技術。請查看AVCaptureDevice.h - activeFormat.

240 fps的慢動做視頻

iphone6和iPhone6 Plus的後置攝像頭有一個720p30的AVCaptureDeviceFormat (420v / 420f) 和一個支持720p240的格式。它支持的幀速率範圍爲5 fps - 240 fps。你能夠經過設置AVCaptureDevice activeFormat的屬性值來設置它(同上面的1080p60同樣)。240 fps 格式已被放棄了。若是你想在iPhone 6 或iPhone 6 Plus上抓取120 fps格式的圖像,找到和選擇支持 240fps 的格式,而後設置AVCaptureDevice activeVideoMinFrameDuration 和activeVideoMaxFrameDuration 屬性爲CMTimeMake( 1, 120 ).

請查看AVCaptureDevice.h - activeFormat.

影院級視頻防抖動功能

iOS 6在iPhone 4S上引入了支持視頻防抖動的API。iPhone 6和6 Plus的後置攝像頭支持一個更積極的、更使人激動的和更流暢的算法--"影院級視頻防抖動功能"。相比較普通的視頻防抖動特性,該防抖動特性減小了相機視角,引入了更多視頻抓取延遲,而且消耗了更多系統內存。所以這個功能不是默認的,必須設置後使用。

當使用影院級視頻防抖動功能時,強烈推薦使用相近的的或者相同的最小幀和最大幀持續時間來保持延遲的一致性和可控性。 iPhone 6 and 6 Plus也支持早期產品中使用的通常視頻防抖動算法。照先前說的,AVCaptureConnection容許你調用AVCaptureConnection setEnablesVideoStabililzationWhenAvailable:方法來選擇視頻防抖功能。AV Foundation如今支持不止一種形式的視頻防抖動功能,所以舊方法(AVCaptureConnection videoStabilizationEnabled:)已經被棄用了,如今更推薦使用AVCaptureConnection setPreferredVideoStabilizationMode:方法。

有4種視頻防抖動模式常數供你選擇,AVCaptureVideoStabilizationModeOff、AVCaptureVideoStabilizationModeStandard、AVCaptureVideoStabilizationModeCinematic以及AVCaptureVideoStabilizationModeAuto。

經過調用AVCaptureDeviceFormat isVideoStabilizationModeSupported:方法,你能夠查詢AVCaptureDevice activeFormat屬性來決定支持哪種防抖模式。設置除了AVCaptureVideoStabilizationModeOff之外的其餘參數都不會強制使視頻防抖動功能打開。由於一些設備的格式和AVCaptureOutput's 不支持防抖動功能。要想決定實際使用哪個視頻防抖動模式,你能夠鍵值觀察其AVCaptureConnection activeVideoStabilizationMode屬性。當你將首選視頻防抖動模式參數爲AVCaptureVideoStabilizationModeAuto時,將會基於你使用的格式和幀速率選擇一個適當的防抖模式。如今只有1080p30 和 1080p60 視頻格式支持影院級視頻防抖動功能。默認的preferredVideoStabilizationMode值是

AVCaptureVideoStabilizationModeOff。在早期的設備上,只有16:9視頻格式支持防抖動。

請查看AVCaptureDevice.h-isVideoStabilizationModeSupported: 和AVCaptureSession.h -preferredVideoStabilizationMode 和activeVideoStabilizationMode.

單鏡頭(視頻) HDR

又叫"流HDR"或者"視頻HDR"。iPhone 6 and 6 Plus 支持連續的、流狀高動態範圍視頻,不一樣於傳統的方法經過將靜態圖片和不一樣的EV值熔合來構建成一張高動態範圍的圖片。HDR支持是嵌入在傳感器裏的。該功能在API裏被稱爲"視頻HDR"。全部前置攝像頭的AVCaptureDeviceFormat對象都支持視頻HDR。在後置攝像頭上,540p30、720p30、1080p30以及1080p60格式支持視頻HDR。

默認狀況下,AVCaptureDevice(AVCaptureDevice automaticallyAdjustsVideoHDREnabled屬性默認是YES)會自動調整視頻HDR。當自動調整視頻HDR開啓時,在你使用setActiveFormat:設置一個新的格式時,AVCaptureDevice會始終關掉videoHDREnabled屬性。相反若是你調用setSessionPreset:方法,AVCaptureDevice會根據視頻HDR是否符合預設狀況來自動開啓或關閉視頻HDR。

若是你想要在某個指定的格式下迫使視頻HDR開啓,請將automaticallyAdjustsVideoHDREnabled屬性設置爲NO, 而後將AVCaptureDevice videoHDREnabled屬性設置爲YES。你可能會不容許設置後面的那個屬性當你第一次關閉視頻HDR自動調整功能。注意,設置videoHDREnabled屬性可能會引發AVCaptureDevice的一個冗長的從新配置過程,相似於設置一個新的有效格式或AVCaptureSession sessionPreset屬性。若是你要設定有效格式或者AVCaptureSession的會話預設和videoHDREnabled,你應該把這些操做括在[session beginConfiguration]和[session commitConfiguration]裏來最小化從新配置時間。

請參看AVCaptureDevice.h-automaticallyAdjustsVideoHDREnabled和videoHDREnabled。

視頻錄製過程當中拍攝高分辨率靜態照片

在全部的設備上,AVCaptureStillImageOutput根據AVCaptureDeviceD activeFormat指定的分辨率來捕捉靜態圖片。換句話說,若是你的activeFormat CMVideoFormatDescription是640x480的分辨率,那麼捕捉到的靜態圖片就是640x480。有時由於AVCaptureVideoDataOutput密集的圖片處理,AVCaptureDevice須要在壓縮分辨率的狀況下運行,可是仍是但願在不影響預覽和重置設備的狀況下抓取全分辨率的靜態圖片。

基於iPhone 6和6 Plus的新特性,你能夠在錄製activeFormat指定分辨率視頻(視頻數據輸出和影片文件輸出)的同時抓取高分辨率的靜態圖片。該高分辨率靜態圖片仍然保持AVCaptureDevice's activeFormat設定的屏幕高寬比和視角。這個功能默認狀況下是關閉的,不過你能夠經過調用AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled:方法開啓它。你也能夠經過查詢AVCaptureDeviceFormat highResolutionStillImageDimensions屬性來獲得捕捉的靜態圖片的分辨率。 當這個功能開啓時你能夠採集視頻,好比錄製192x144的視頻同時抓取3264x2448(全8兆像素)的靜態圖片。注意,若是你容許對於全部的輸出都要保持視頻防抖動,那麼AVCaptureStillImageOutput輸出的高分辨率靜態圖片會小個10%或更多。 視頻錄製過程當中的高分辨率靜態圖片功能只在後置攝像頭上支持。

做爲參考,如下列出了支持iPhone 6和iPhone 6 Plus的前置和後置攝像頭的AVCaptureDeviceFormat

TABLE KEY  (圖片 1, 圖片 2)

HRSI = 高分辨率靜態圖片量度

FOV = 視角

VIS = 支持視頻防抖動的格式

Max Zoom = 最大視頻變焦因子

Upscales = 在某一個數字高標度時使用的變焦因子

AF = 自動對焦系統(1 = 對比檢測, 2 = 相位檢測)

ISO = 支持的ISO範圍 

SS = 支持的曝光持續範圍

HDR = 這個格式支持視頻HDR

Figure 1  支持後置攝像頭AVCaptureDeviceFormat項目


Figure 2  Supported AVCaptureDeviceFormat's for the back camera.
相關文章
相關標籤/搜索