3

使用案例:我想从摄像头捕获输入,在捕获的帧(和声音)上绘制并将结果保存为.mov文件。在保存AVCaptureMovieFileOutput之前修改AVCaptureSession

  • 我看到我可以使用AVCaptureSession捕获摄像头的输入。
  • 我可以使用AVCaptureMovieFileOutput将其保存到.mov文件。
  • AVVideoComposition可用于添加核心动画播放。我也假设用于记录?

问题:我看不出之前将其保存到文件修改输入。

回答

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); 
0

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

至于AVVideoComposition,我想你可能必须在AVAssetExportSession的单独通行证中使用它。

相关问题