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