我用swift 3和AVCaptureSession以这种方式抓取帧。
我想要做的是将帧存储在内存中。简单 ?我只需将像素缓冲区存储在内存中,或将其写入文档文件......
但是我想存储大约一分钟的帧然后删除旧帧以替换新帧。当用户按下按钮时,我想在帧的最后一分钟保留在内存中。我曾试图写一个双链表,但我不认为这对性能有好处。使用AVFoundation工具有最好的方法吗?
由于
let videoOutput = AVCaptureVideoDataOutput()
videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString:kCVPixelFormatType_32BGRA]
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "my queue"))
if session.canAddOutput(videoOutput)
{
session.addOutput(videoOutput)
}
// AVCaptureVideoDataOutputSampleBufferDelegate
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!)
{
NSLog("frame")
let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
}