如何为高分辨率静止图像和低分辨率(视频)预览配置AVCaptureSession?

时间:2016-03-11 10:39:49

标签: ios camera avfoundation avcapturesession

我想使用AVCaptureSession捕捉高分辨率静止图像。因此,AVCaptureSession预设设置为Photo

到目前为止这种方法运作良好。在iPhone 4上,最终静止图像分辨率最高为2448x3264像素,预览(视频)分辨率为852x640像素。

现在,因为分析预览帧以检测场景中的对象,我想降低它们的分辨率。如何才能做到这一点? 我尝试将AVVideoSettings的宽度/高度设置为AVCaptureVideoDataOutput,但这会导致以下错误消息:

AVCaptureVideoDataOutput setVideoSettings:] - videoSettings dictionary contains one or more unsupported (ignored) keys: (AVVideoHeightKey, AVVideoWidthKey

因此,似乎这不是配置AVCaptureVideoDataOutput / AVCaptureVideoDataOutputSampleBufferDelegate收到的预览帧大小的正确方法。您对如何配置预览帧的分辨率有任何想法吗?

欢迎任何建议, 谢谢。

3 个答案:

答案 0 :(得分:0)

如果您想手动指定设置,则需要在activeFormat上设置AVCaptureDevice。这将隐式将会话预设设置为AVCaptureSessionPresetInputPriority

activeFormat需要AVCaptureDeviceFormat,但您只能从AVCaptureDevice.formats列表中选择一个。您需要查看列表并找到符合您需求的列表。具体来说,请检查highResolutionStillImageDimensions是否足够高以进行所需的静态捕获,formatDescription(需要使用CMFormatDescription*功能进行检查,例如CMVideoFormatDescriptionGetDimensions)符合您所需的预览设置。

答案 1 :(得分:0)

仅供记录:我在瞄准相机时最终在预设AVCaptureSession中配置Low。一旦快门被触发,应用程序就会切换到预设Photo,执行对焦运行并拍摄照片。这样拍摄照片需要1到2.5秒,这不是很好,但它至少是一种解决方法。

答案 2 :(得分:-1)

要降低AVCaptureVideoDataOutput输出的大小,可以将比特率设置得更低,从而产生较小的样本量。

AVCaptureVideoDataOutput常用的键是:

AVVideoAverageBitRateKey
AVVideoProfileLevelKey
AVVideoExpectedSourceFrameRateKey
AVVideoMaxKeyFrameIntervalKey

例如:

private static let videoCompressionOptionsMedium = [AVVideoAverageBitRateKey : 1750000,
                                                    AVVideoProfileLevelKey : AVVideoProfileLevelH264BaselineAutoLevel,
                                                    AVVideoExpectedSourceFrameRateKey : Int(30),
                                                    AVVideoMaxKeyFrameIntervalKey : Int(30)]