我想使用AVCaptureSession
捕捉高分辨率静止图像。因此,AVCaptureSession
预设设置为Photo
。
到目前为止这种方法运作良好。在iPhone 4上,最终静止图像分辨率最高为2448x3264像素,预览(视频)分辨率为852x640像素。
现在,因为分析预览帧以检测场景中的对象,我想降低它们的分辨率。如何才能做到这一点?
我尝试将AVVideoSettings
的宽度/高度设置为AVCaptureVideoDataOutput
,但这会导致以下错误消息:
AVCaptureVideoDataOutput setVideoSettings:] - videoSettings dictionary contains one or more unsupported (ignored) keys: (AVVideoHeightKey, AVVideoWidthKey
因此,似乎这不是配置AVCaptureVideoDataOutput
/ AVCaptureVideoDataOutputSampleBufferDelegate
收到的预览帧大小的正确方法。您对如何配置预览帧的分辨率有任何想法吗?
欢迎任何建议, 谢谢。
答案 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)]