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.