iOS AVCaptureSession - 如何获取/设置每秒记录的帧数?

Oha*_*gev 13 frame-rate ios avcapturesession

我是AVCaptureSession的新手,希望更好地了解如何使用它.因此,我将视频流捕获为分离的CIImages并将其转换为UIImages.现在我希望能够获得每秒帧数的捕获量,并且最好能够设置它.

知道怎么做吗?

Mou*_*her 15

AVCaptureConnection's videoMinFrameDuration 已弃用.

您可以使用AVCaptureDevice属性来检测支持的视频帧速率范围,并可以使用属性分配最小和最大帧速率.

device.activeFormat.videoSupportedFrameRateRanges 返回设备支持的所有视频帧速率范围.

device.activeVideoMinFrameDurationdevice.activeVideoMaxFrameDuration可用于指定帧持续时间.


Ila*_*ian 9

您可以使用AVCaptureConnection's videoMinFrameDurationaccessor来设置值.

请参阅AVCaptureConnection文档

考虑outputAVCaptureVideoDataOutput对象.

AVCaptureConnection *conn = [output connectionWithMediaType:AVMediaTypeVideo];

if (conn.isVideoMinFrameDurationSupported)
    conn.videoMinFrameDuration = CMTimeMake(1, CAPTURE_FRAMES_PER_SECOND);
if (conn.isVideoMaxFrameDurationSupported)
    conn.videoMaxFrameDuration = CMTimeMake(1, CAPTURE_FRAMES_PER_SECOND);
Run Code Online (Sandbox Code Playgroud)

更多信息,请参阅此SO问题中的答案


Mac*_*dor 9

要设置捕获会话帧速率,您必须使用device.activeVideoMinFrameDurationdevice.activeVideoMaxFrameDuration(如有必要)在设备上设置它。

Swift 4 中,您可以执行以下操作:

extension AVCaptureDevice {
    func set(frameRate: Double) {
    guard let range = activeFormat.videoSupportedFrameRateRanges.first,
        range.minFrameRate...range.maxFrameRate ~= frameRate
        else {
            print("Requested FPS is not supported by the device's activeFormat !")
            return
    }

    do { try lockForConfiguration()
        activeVideoMinFrameDuration = CMTimeMake(value: 1, timescale: Int32(frameRate))
        activeVideoMaxFrameDuration = CMTimeMake(value: 1, timescale: Int32(frameRate))
        unlockForConfiguration()
    } catch {
        print("LockForConfiguration failed with error: \(error.localizedDescription)")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并称之为

device.set(frameRate: 60)
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

13595 次

最近记录:

7 年 前