使用AVCaptureVideoDataOutput实时应用过滤器并将缓冲区写入文件

时间:2015-09-13 02:39:20

标签: ios swift video avfoundation video-processing

我正在Swift开发相机应用程序,可以实时编辑每一帧。

所以我需要的是:

  1. 使用CIFilter修改每一帧 - 可能使用AVCaptureVideoDataOutput

  2. 将数据缓冲区写入AVAssetWriter

  3. 添加音频
  4. 为视频添加一些标签
  5. 实时查看相机“看到”但已由CIFilter
  6. 编辑的内容

    我所拥有的:

    我能够编辑视频输出并使用imageView将其显示在屏幕上。但我认为这不是最好的方法,而iPhone 4S我的FPS非常低:

    func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!)
    {
        guard let filter = Filters["Saturation"]
    
        let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
        let cameraImage = CIImage(CVPixelBuffer: pixelBuffer!)
    
        filter!.setValue(cameraImage, forKey: kCIInputImageKey)
    
        let filteredImage = UIImage(CIImage: filter!.valueForKey(kCIOutputImageKey) as! CIImage!)
    
        dispatch_async(dispatch_get_main_queue())
            {
                self.imageView.image = filteredImage
        }
    
    }
    

    那么如何更改我的代码以更有效地编辑框架,将其显示到屏幕以及何时需要将其写入文件(我知道,我必须将filtred图像转换为CMSampleBuffer,但我不知道知道如何使用NSTime)?

0 个答案:

没有答案