我已经设置了所有设置来录制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];
}
答案 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];
如果这不起作用,您可以重新配置输出设置,以便以支持的像素格式之一提供样本缓冲区。