gpt4 book ai didi

ios - 使用 AVFoundation Swift 录制视频

转载 作者:可可西里 更新时间:2023-11-01 01:37:26 24 4
gpt4 key购买 nike

我创建了一个 AVCaptureSession 并操纵(变形)用户面部的每一帧,添加图层等。如何将这些帧转换为可以保存到相机胶卷的视频?

下面是我如何设置 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])

如何录制视频?

最佳答案

我找到了解决您问题的方法。我也在 Swift 工作,也有同样的问题。我很感谢你发布了这个问题,因为它对我帮助很大。我能够成功处理帧,然后将它们写入相机胶卷。我还没有完善它,但它是可能的。

事实证明,一旦你开始摆弄 AVCaptureDataOutput,你就会失去使用 AVCaptureMovieFileOutput 的能力,参见讨论 here .

可以找到您问题的简明解决方案here .这是我实现的版本。将 sampleBuffer 提供给 AVAssetWriterInput 对象。

更详细 guide解决问题的确切描述需要哪些部分(即 AVAssetWriter、AVAssetWriterInput 和 outSettings 等)以及它们的外观。

我发布的链接是obj-c,但可以翻译成swift。我希望你已经解决了你的问题。

关于ios - 使用 AVFoundation Swift 录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35228361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com