我正在尝试实现一个可以显示后置摄像头预览视频并处理捕获的帧的视图。我想使用两个输出:一个用于保存视频,一个用于处理每一帧。
let movieOutput = AVCaptureMovieFileOutput()
let videoDataOutput = AVCaptureVideoDataOutput()
我已将代表添加到我的视图控制器中:
class ViewController: UIViewController, AVCaptureFileOutputRecordingDelegate, AVCaptureVideoDataOutputSampleBufferDelegate
此外,我已将输出添加到 AVCaptureSession:
do {
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as AnyHashable as! String: NSNumber(value: kCVPixelFormatType_32BGRA)]
videoDataOutput.alwaysDiscardsLateVideoFrames = true
let queue = DispatchQueue(label: "videosamplequeue")
videoDataOutput.setSampleBufferDelegate(self, queue: queue)
guard captureSession.canAddOutput(videoDataOutput) else {
fatalError()
}
if captureSession.canAddOutput(videoDataOutput){
captureSession.addOutput(videoDataOutput)
}
videoConnection = videoDataOutput.connection(withMediaType:AVMediaTypeVideo)
}
if captureSession.canAddOutput(movieOutput) {
captureSession.addOutput(movieOutput)
}
我的预览层完美运行,我可以在我的 UI 视图中看到图片显示。但是从不调用 captureOutput。如果我评论:
//if captureSession.canAddOutput(movieOutput) {
// captureSession.addOutput(movieOutput)
// }
然后,我的 captureOutput 被调用并且工作正常,但我想将我的视频保存在一个文件中。我正在使用 swift 3,所以我正在使用:
func captureOutput(_ output: AVCaptureOutput, didOutputSampleBuffer sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)