基于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项目

基于iOS8以上版本的AV Foundation框架特性之--AVCaptureDevice_第1张图片

Figure 2  Supported AVCaptureDeviceFormat's for the back camera.

基于iOS8以上版本的AV Foundation框架特性之--AVCaptureDevice_第2张图片

你可能感兴趣的:(iOS)