【问题标题】:Modify AVCaptureSession before saving with AVCaptureMovieFileOutput在使用 AVCaptureMovieFileOutput 保存之前修改 AVCaptureSession
【发布时间】:2012-06-22 15:55:52
【问题描述】:

用例:我想捕获来自相机的输入,在捕获的帧(和声音)之上绘制并将结果保存为 .mov 文件。

  • 我发现我可以使用 AVCaptureSession 为摄像头捕获输入。
  • 我可以使用 AVCaptureMovieFileOutput 将其保存到 .mov 文件中。
  • AVVideoComposition 可用于添加核心动画以进行播放。我也想以某种方式录制?

问题:在将输入保存到文件之前,我看不到如何修改它。

【问题讨论】:

    标签: ios avfoundation avcapturesession avcapturemoviefileoutput


    【解决方案1】:

    RosyWriter 几乎在做我想做的事。将以下代码添加到 captureOutput:didOutputSampleBuffer:fromConnection: 使我能够使用 Quartz 绘制到框架上。

        CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    
        CVPixelBufferLockBaseAddress(pixelBuffer, 0);
        void *pxdata = CVPixelBufferGetBaseAddress(pixelBuffer);
        NSParameterAssert(pxdata != NULL);
    
        CGSize frameSize = CGSizeMake(self.videoDimensions.width, self.videoDimensions.height);
    
        CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
        CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width,
                                                     frameSize.height, 8, 4*frameSize.width, rgbColorSpace, 
                                                     kCGImageAlphaNoneSkipFirst);
    
        CGContextMoveToPoint(context, 100, 100);
        CGContextAddLineToPoint(context, 200, 200);
        CGContextDrawPath(context, kCGPathStroke);
    
        CGColorSpaceRelease(rgbColorSpace);
        CGContextRelease(context);
    

    【讨论】:

      【解决方案2】:

      AVCaptureMovieFileOutput 不允许您处理捕获的帧。为此,请将其替换为 AVCaptureVideoDataOutput,并使用 AVAssetWriter 将输入编码为 .mov 文件。

      至于AVVideoComposition,我认为您可能需要使用AVAssetExportSession 在单独的通道中应用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-21
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 2021-03-04
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多