如何为高分辨率静止图像和低分辨率(视频)预览配置 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接收的预览帧大小的正确方法。您知道如何配置预览帧的分辨率吗?

欢迎任何建议,谢谢。

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

activeFormat需要AVCaptureDeviceFormat但您只能从AVCaptureDevice.formats列表中获取一个。您需要浏览列表并找到适合您需求的列表。具体来说,检查highResolutionStillImageDimensions是否足够高以进行所需的静止图像捕获,并且formatDescription(需要使用CMFormatDescription*功能进行检查,例如CMVideoFormatDescriptionGetDimensions)是否与所需的预览设置相匹配。

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

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

AVCaptureVideoDataOutput常用的密钥包括:

AVVideoAverageBitRateKey
AVVideoProfileLevelKey
AVVideoExpectedSourceFrameRateKey
AVVideoMaxKeyFrameIntervalKey

例如:

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

相关内容

  • 没有找到相关文章

最新更新