首页 > 解决方案 > 如何快速从实时视频中每5秒捕获一帧

问题描述

我是 swift 新手,想分析实时视频中的图像,但大多数答案都解释了如何捕获每一帧视频,代码如下,我想每 5(或 N)秒提取一次图像,如何修改代码。

   func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        DispatchQueue.main.async {[unowned self] in
            guard let uiImage = self.imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
        }
    }

标签: swiftavfoundationintervalsimage-capture

解决方案


也许你可以通过做这样的事情来自己跟踪经过的时间?

var lastSampleDate = Date.distantPast
let sampleInterval: TimeInterval = 5 // 5 seconds

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    let currentDate = Date()
    guard currentDate.timeIntervalSince(lastSampleDate) >= sampleInterval else {
        return
    }

    lastSampleDate = currentDate
    DispatchQueue.main.async { [unowned self] in
        guard let uiImage = self.imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
    }
}

推荐阅读