在 AVFoundation 中,要将实时的 CMSampleBuffer 存储到数组中,你可以使用 AVCaptureVideoDataOutputSampleBufferDelegate 和 AVCaptureVideoDataOutput 来实现。以下是一个示例代码:
import AVFoundation
class VideoCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate {
let captureSession = AVCaptureSession()
var sampleBuffers: [CMSampleBuffer] = []
override init() {
super.init()
configureCaptureSession()
}
func configureCaptureSession() {
guard let captureDevice = AVCaptureDevice.default(for: .video) else {
return
}
do {
let captureInput = try AVCaptureDeviceInput(device: captureDevice)
captureSession.addInput(captureInput)
let captureOutput = AVCaptureVideoDataOutput()
captureOutput.setSampleBufferDelegate(self, queue: DispatchQueue.main)
captureSession.addOutput(captureOutput)
captureSession.startRunning()
} catch {
print("Error configuring capture session: \(error.localizedDescription)")
}
}
// AVCaptureVideoDataOutputSampleBufferDelegate method
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// 存储 sampleBuffer 到数组中
sampleBuffers.append(sampleBuffer)
}
}
在上面的示例代码中,我们创建了一个名为 VideoCapture 的类,它遵循 AVCaptureVideoDataOutputSampleBufferDelegate 协议。在 configureCaptureSession 方法中,我们配置了 AVCaptureSession,并将 AVCaptureVideoDataOutput 设置为输出,并将 self 设置为 sample buffer 的代理。
在 captureOutput 方法中,我们将收到的 sample buffer 存储到 sampleBuffers 数组中。
请注意,该示例代码是使用 Swift 编写的,如果你使用的是 Objective-C,代码会有所不同,但原理是相同的。