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.