访问AVFoundation中的当前输出样本缓冲区

时间:2013-07-16 17:40:35

标签: macos video avfoundation ciimage

我已经设置了所有设置来录制AVFoundation上的视频(对于Mac而不是iOS),我可以通过AVCaptureVideoPreviewLayer获取视频预览,我也可以拍摄静止图像但是我无法从视频输出中获取样本缓冲区,我需要因为我需要进一步编辑,而不是预览层支持。

下面的代码是我目前正在使用的,当调用imageBuffer创建正常但是当我尝试将其导出到CIImage时,CIImage保持为零。任何帮助将不胜感激。

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
   fromConnection:(AVCaptureConnection *)connection
{
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    CIImage *ciImage = [[CIImage alloc] initWithCVImageBuffer:imageBuffer];
}

1 个答案:

答案 0 :(得分:1)

来自docs

  

imageBuffer参数必须采用以下格式之一:

     
      
  • kCVPixelFormatType_32ARGB
  •   
  • kCVPixelFormatType_422YpCbCr8
  •   
  • kCVPixelFormatType_32BGRA
  •   

您可以尝试路线图像缓冲区→IOSurface→CIImage 也许基于表面的CIImage初始化程序会进行一些隐式转换:

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
IOSurfaceRef surface = CVPixelBufferGetIOSurface(imageBuffer);
CIImage* ciImage = [[CIImage alloc] initWithIOSurface:surface];

如果这不起作用,您可以重新配置输出设置,以便以支持的像素格式之一提供样本缓冲区。