2

我已经准备好在 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];
}
4

1 回答 1

2

文档

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

  • kCVPixelFormatType_32ARGB
  • kCVPixelFormatType_422YpCbCr8
  • kCVPixelFormatType_32BGRA

您可以尝试使用 Image Buffer → IOSurface → CIImage 路线。
也许基于表面的 CIImage 初始化器做了一些隐式转换:

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

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

于 2013-07-17T08:10:21.673 回答