帧率与分辨率
设备帧率与分辨率在帧率大于30fps时,两者有着绑定关系,即不能自由设置。
低帧率模式(fps <= 30)
低帧率模式(fps <= 30)下,帧率和分辨率可以分别自由设置。即设置:
- AVCaptureSession的
sessionPreset
:设置分辨率及其预设格式。 - AVCaptureDevice的
activeVideoMinFrameDuration
、activeVideoMaxFrameDuration
高帧率模式(fps > 30)
高帧率模式(fps > 30)下,帧率不能自由设置,需要遍历设备支持的格式,在格式支持的帧率范围选择合适的帧率。为了统一操作,低帧率模式下也可以应用该设置方式。
- 获取设备对象的
formats
数组,并进行遍历(也可以进一步获取其中的CMFormatDescription):- 获取Format的
videoSupportedFrameRateRanges
数组的首个元素。 - 比对AVFrameRateRange的
maxFrameRate
是否 >= 目标帧率,满足继续,否则跳过循环。 - 比对Format的
formatDescription.dimensions
是否满足要求,满足继续,否则跳过循环。 - 锁定设备进入配置:
- 设置AVCaptureDevice的
activeFormat
为当前Format对象; - 设置AVCaptureDevice的
activeVideoMinFrameDuration
、activeVideoMaxFrameDuration
为目标帧率。
- 设置AVCaptureDevice的
- 解锁设备完成配置。
- 获取Format的