3

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

  • 我看到我可以使用 AVCaptureSession 捕获相机的输入。
  • 我可以使用 AVCaptureMovieFileOutput 将其保存到 .mov 文件中。
  • AVVideoComposition 可用于添加 Core Animation 进行播放。我假设也以某种方式录制?

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

4

2 回答 2

5

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);
于 2012-06-25T19:24:20.390 回答
0

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

至于AVVideoComposition,我认为您可能必须在单独的通行证中使用AVAssetExportSession.

于 2012-06-24T01:20:13.980 回答