以高效的方式获取 CVPixelBuffer(相机框架和 ar 模型)
Get CVPixelBuffer (camera frame along with ar models) in a performant manner
我需要一个 CVPixelBuffer
包含相机框架以及我放置的 AR 模型,速率为 30+ fps,最好具有低能量和 CPU 影响。
session(_:didUpdate:)
中帧的捕获图像不包含 AR 模型。
我试过使用 sceneView.snapshot()
得到 UIImage
,然后我将其转换为 CVPixelBuffer
。这具有明显的高能量影响。
最后,我还尝试创建一个 SCNRenderer
,然后我用它通过 snapshot(atTime:with:antialiasingMode:)
获取 UIImage
,然后转换为 CVPixelBuffer
。这对 CPU 和能源影响略小。但这仅适用于纵向模式,生成的 UIImage
在横向模式下不正确。
有没有办法以更少 CPU 和能源密集的方式获得 CVPixelBuffer
(至少与上述相比)?
您可以创建自己的 CVPixelBuffer
,然后从中获取 MTLTexture
,最后将 SCNRenderer
渲染到该纹理中。这不会涉及从快照 API.
生成 UIImage
的 CPU 成本
这里的关键部分是use a CVMetalTextureCache
从像素缓冲区中获取金属纹理。
我需要一个 CVPixelBuffer
包含相机框架以及我放置的 AR 模型,速率为 30+ fps,最好具有低能量和 CPU 影响。
session(_:didUpdate:)
中帧的捕获图像不包含 AR 模型。
我试过使用 sceneView.snapshot()
得到 UIImage
,然后我将其转换为 CVPixelBuffer
。这具有明显的高能量影响。
最后,我还尝试创建一个 SCNRenderer
,然后我用它通过 snapshot(atTime:with:antialiasingMode:)
获取 UIImage
,然后转换为 CVPixelBuffer
。这对 CPU 和能源影响略小。但这仅适用于纵向模式,生成的 UIImage
在横向模式下不正确。
有没有办法以更少 CPU 和能源密集的方式获得 CVPixelBuffer
(至少与上述相比)?
您可以创建自己的 CVPixelBuffer
,然后从中获取 MTLTexture
,最后将 SCNRenderer
渲染到该纹理中。这不会涉及从快照 API.
UIImage
的 CPU 成本
这里的关键部分是use a CVMetalTextureCache
从像素缓冲区中获取金属纹理。