我創建了一個AVCaptureSession,並操作每個幀(變形)用戶的臉部,添加圖層等。我怎樣才能將這些幀轉換爲可以保存到相機膠捲的視頻?使用AVFoundation Swift錄製視頻
下面是如何設置AVCaptureSession
func setupCapture() {
let session : AVCaptureSession = AVCaptureSession()
session.sessionPreset = AVCaptureSessionPreset640x480
let device : AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
let deviceInput : AVCaptureDeviceInput = try! AVCaptureDeviceInput(device: device)
if session.canAddInput(deviceInput) {
session.addInput(deviceInput)
}
stillImageOutput = AVCaptureStillImageOutput()
videoDataOutput = AVCaptureVideoDataOutput()
let rgbOutputSettings = [kCVPixelBufferPixelFormatTypeKey as String: NSNumber(unsignedInt: kCMPixelFormat_32BGRA)]
videoDataOutput.videoSettings = rgbOutputSettings
videoDataOutput.alwaysDiscardsLateVideoFrames = true
videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL)
videoDataOutput.setSampleBufferDelegate(self, queue: videoDataOutputQueue)
if session.canAddOutput(videoDataOutput) {
session.addOutput(videoDataOutput)
}
videoDataOutput.connectionWithMediaType(AVMediaTypeVideo).enabled = false
effectiveScale = 1.0
previewLayer = AVCaptureVideoPreviewLayer(session: session)
previewLayer.backgroundColor = UIColor.blackColor().CGColor
previewLayer.videoGravity = AVLayerVideoGravityResizeAspect
let rootLayer : CALayer = previewView.layer
rootLayer.masksToBounds = true
previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(previewLayer)
session.startRunning()
}
比我使用CMSampleBuffer
得到CIImage
其中添加我的效果。
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
let pixelBuffer : CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)!
let attachments : CFDictionaryRef = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, pixelBuffer, CMAttachmentMode(kCMAttachmentMode_ShouldPropagate))!
let ciImage : CIImage = CIImage(CVPixelBuffer: pixelBuffer, options: attachments as? [String : AnyObject])
我該如何錄製視頻?
我有同樣的問題嗎?你找到了解決方案嗎? – Sam
什麼都沒有,讓我知道你的情況。 –