AVCaptureSession可以使用自定义分辨率

时间:2016-01-06 18:50:51

标签: ios avfoundation avcapturesession

我使用AVCaptureSession来捕获和录制视频。

我需要以4:3的比例录制视频,并且分辨率很高。

使用AVCaptureSession进行捕获时,有没有办法指定自定义分辨率?

我尝试使用原生预设,但问题是我需要以4:3的比例捕捉,几乎所有的预设都是16:9。而那些4:3的分辨率非常低。

我无法以任何其他方式将预设更改为自定义预设,如果我需要以更高分辨率捕获4:3视频,该怎么办?有什么想法吗?

2 个答案:

答案 0 :(得分:8)

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的programming guidethe WWDC2013 session中通过AVCaptureDeviceFormat找到有关配置捕获会话的详细信息,该版本在iOS 7.0中引入了设备格式。 (你发现的关于这个主题的大部分内容都是针对慢动作视频,在视频中拍摄高分辨率的照片,以及其他你可以用会话预设做的事情,但那些并非如此。你可以用捕获格式做的唯一事情。)

答案 1 :(得分:1)

只需以给定的宽高比录制,然后使用AVMutableComposition将输出视频裁剪为所需的宽高比:如果您将预览图层调整为4:3,则对用户来说这将是无缝的。