0%

AVFoundation设备配置

帧率与分辨率

设备帧率与分辨率在帧率大于30fps时,两者有着绑定关系,即不能自由设置。

低帧率模式(fps <= 30)

低帧率模式(fps <= 30)下,帧率和分辨率可以分别自由设置。即设置:

  • AVCaptureSession的sessionPreset:设置分辨率及其预设格式。
  • AVCaptureDevice的activeVideoMinFrameDurationactiveVideoMaxFrameDuration

高帧率模式(fps > 30)

高帧率模式(fps > 30)下,帧率不能自由设置,需要遍历设备支持的格式,在格式支持的帧率范围选择合适的帧率。为了统一操作,低帧率模式下也可以应用该设置方式。

  1. 获取设备对象的formats数组,并进行遍历(也可以进一步获取其中的CMFormatDescription):
    1. 获取Format的videoSupportedFrameRateRanges数组的首个元素。
    2. 比对AVFrameRateRange的maxFrameRate是否 >= 目标帧率,满足继续,否则跳过循环。
    3. 比对Format的formatDescription.dimensions是否满足要求,满足继续,否则跳过循环。
    4. 锁定设备进入配置:
      1. 设置AVCaptureDevice的activeFormat为当前Format对象;
      2. 设置AVCaptureDevice的activeVideoMinFrameDurationactiveVideoMaxFrameDuration为目标帧率。
    5. 解锁设备完成配置。

欢迎关注我的其它发布渠道