在使用AVCaptureMovieFileOutput保存之前修改AVCaptureSession

Ona*_*ato 3 avfoundation ios avcapturesession avcapturemoviefileoutput

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

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

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

Ona*_*ato 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);
Run Code Online (Sandbox Code Playgroud)