我正在使用AVCaptureSession来捕获和录制视频.
我需要以4:3的比例录制视频,并以较好的分辨率录制.
有没有办法在使用AVCaptureSession捕获时指定自定义分辨率?
我尝试使用本地预设,但问题是我需要以4:3的比例捕获,几乎所有的预设都是16:9. 4:3的分辨率非常低.
我无法以任何其他方式将预设更改为自定义,如果我需要以更好的分辨率捕获4:3视频?有任何想法吗?
解决方法
AVCaptureSession预设仅覆盖设备相机的一小部分功能(大多数应用程序需要快速,轻松访问).对于更精细的控制 – 例如选择不是由会话预设提供的捕获分辨率 – 您需要使用捕获格式.
查看捕获设备的formats
属性,一系列AVCaptureDeviceFormat
对象.通过该数组枚举,直到找到一个尺寸为您想要的尺寸.要获取尺寸,请查看格式的CMFormatDescription:
let fdesc = format.formatDescription let dims = CMVideoFormatDescriptionGetDimensions(fdesc) NSLog("%d x %d",dims.width,dims.height)
找到所需的格式后,锁定设备进行配置并设置其activeFormat
:
if try device.lockForConfiguration() { device.activeFormat = myChosenFormat // set up other things like activeVideoMinFrameDuration if you want device.unlockForConfiguration() }
您可以在Apple 7.000和the WWDC2013 session中通过AVCaptureDeviceFormat了解如何在iOS 7.0中引入设备格式的更多信息. (关于这个主题的大部分内容都是针对慢动作视频,在视频中拍摄高分辨率静态图像,以及您不能使用会话预设的其他功能,但这些不是您可以使用的做捕获格式.)