ios - AVCaptureSession 能否使用自定义分辨率

标签 ios avfoundation avcapturesession

我正在使用 AVCaptureSession 来捕捉和录制视频。

我需要以 4:3 的比例和良好的分辨率录制视频。

在使用 AVCaptureSession 捕获时是否可以指定自定义分辨率?

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

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

最佳答案

AVCaptureSession 预设仅涵盖设备相机功能的一小部分(大多数应用程序都希望快速、轻松地访问这些功能)。要进行更细粒度的控制(例如选择 session 预设未提供的捕获分辨率),您需要改用捕获格式。

查看捕获设备的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 guide 中找到有关通过 AVCaptureDeviceFormat 配置捕获 session 的更多信息和 the WWDC2013 session在 iOS 7.0 中引入了设备格式。 (你会发现关于这个主题的大部分内容都是针对慢动作视频,在视频中拍摄高分辨率静止图像,以及其他你不能用 session 预设做的事情,但这些并不是你唯一可以做的事情处理捕获格式。)

关于ios - AVCaptureSession 能否使用自定义分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34640551/

相关文章:

ios - 如何以编程方式在 UINavigationController 中显示第二个模态 ViewController

ios - '-[AVPlayer super View ] : unrecognized selector sent to instance 0x21011ad0'

ios - 如何直接在 iOS 应用程序中存储和使用 MP4 文件

ios - 1080p AVCaptureSession

ios - AVCaptureMovieFileOutput - 没有事件/启用的连接

ios - 从 Swift 中的 AVCaptureSession 获取输出以发送到服务器

ios - 在 iOS Swift 2.1 中适合谷歌地图 View 以包含多边形的最佳方法?

iphone - 在 ios 中调用方法时的超精度

ios - 如何在 Swift 中进行轻量级核心数据迁移

ios6 - AVAssetWriter finishWritingWithCompletionHandler 错误与未知错误