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

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

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

    最佳答案

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

    10-05 20:03