CIImage回到CMSampleBuffer

问题描述 投票:1回答:1

我使用AVAssetWriterCMSampleBuffer数据(来自视频,音频输入)录制视频(.mp4文件)。

在录制我想要处理帧时,我正在将CMSampleBuffer转换为CIImage并进行处理。

但如何使用CMSampleBuffer的新处理图像缓冲区更新CIImage

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    if output == videoOutput {
       let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
       let ciimage: CIImage = CIImage(cvPixelBuffer: imageBuffer)
       ... // my code to process CIImage (for example add augmented reality)
       // but how to convert it back to CMSampleBuffer?
       // because AVAssetWriterInput to encode video/audio in file needs CMSampleBuffer
       ...
    } 
    ...
}
ios swift core-image video-recording
1个回答
1
投票

您需要使用CIContext的render(_:to:bounds:colorSpace:)方法将CIImage渲染为CVPixelBuffer。

然后,您可以使用例如CVPixelBuffer创建CMSampleBuffer。 CMSampleBufferCreateReadyWithImageBuffer(_:_:_:_:_:)

出于效率原因,您可能需要使用CVPixelBuffer池,Apple的AVCamPhotoFilter示例代码中显示了此示例。特别是,请参阅RosyCIRenderer class

也看到这个答案可能会帮助你Applying a CIFilter to a Video File and Saving it

© www.soinside.com 2019 - 2024. All rights reserved.