我从AVCaptureSession中获取了CVImageBufferRef,我想获取该图像缓冲区并通过网络上传。为了节省空间和时间,我希望不将图像渲染为CIImage和NSBitmapImage来执行此操作,这是我到处都看到的解决方案(例如How can I obtain raw data from a CVImageBuffer object)。

这是因为我的印象是CVImageBuffer可能会被压缩,这对我来说真是太棒了,如果我渲染它,则必须将其解压缩为完整的位图,然后上传整个位图。我想获取压缩数据(意识到单个压缩帧以后可能无法渲染),就像它位于CVImageBuffer中一样。我认为这意味着我想要CVImageBuffer的基本数据指针及其长度,但是似乎没有办法在API中获得它。有人有什么想法吗?

最佳答案

CVImageBuffer本身是一种抽象类型。您的图像应该是CVPixelBuffer,CVOpenGLBuffer或CVOpenGLTexture的实例。这些类型的文档列出了可用于访问数据的功能。

要告诉您使用哪种类型,请使用GetTypeID方法:

CVImageBufferRef image = …;
CFTypeID imageType = CFGetTypeID(image);

if (imageType == CVPixelBufferGetTypeID()) {
  // Pixel Data
}
else if (imageType == CVOpenGLBufferGetTypeID()) {
  // OpenGL pbuffer
}
else if (imageType == CVOpenGLTextureGetTypeID()) {
  // OpenGL Texture
}

关于cocoa - 来自CVImageBuffer的未渲染的原始数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5626703/

10-11 08:42