我想从AVFoundation回调中获取CMSampleBufferRef的大小
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
size_t CMSampleBufferGetTotalSampleSize ( CMSampleBufferRef sbuf );
如果我理解正确,我应该使用此方法来获取缓冲区大小。但 我总是从归来得到0。据说“如果此CMSampleBuffer中没有样本大小,则返回大小为0”。在这种情况下,我想知道AVFoundation框架是不提供缓冲区大小信息还是我误解了文档。
跟进问题: 顺便说一句,我想知道在这种情况下我是否可以使用
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
从pixelBuffer获取sampleBuffer的大小?
答案 0 :(得分:1)
如果您的 CMSampleBuffer
预期包含图像,那么您可以执行以下操作
- (CGSize)sampleBufferSize:(CMSampleBufferRef)sampleBuffer {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
size_t imageWidth = CVPixelBufferGetWidth(imageBuffer);
size_t imageHeight = CVPixelBufferGetHeight(imageBuffer);
return CGSizeMake(imageWidth, imageHeight);
}
答案 1 :(得分:0)
如何创建AVCaptureSession?
CMSampleBuffer基本上可以包含多个信息。
因此,您应首先检查captureoutput
是否符合您的要求,如果是,并且您希望获得图像,则应将图像设为CVPixelBufferRef
,然后检查图像上的数据大小使用CVPixelBufferGetDataSize