繁体   English   中英

在 SceneKit iOS 中渲染流式视频的最有效方法是什么?

[英]What is the most efficient way to render a streamed video in SceneKit iOS?

我正在开发一个显示流式视频的 SceneKit 应用程序。 在其中我创建了一个平面,将 UIImage 附加到它,然后保存 CALayer。 后来我得到一个压缩视频stream,我把它解压成一个CGImage。 然后我用新的 CGImage 更新 CALayer 的内容。 这一切都有效,但是帧速率非常慢,而且似乎不是流式传输或解压缩问题。

我的问题是:有没有更快、更有效的方法来做到这一点? 我已经对 SCNPlane 进行了旋转和偏移转换。 但是,这些应该只是矩阵更新,不应更改渲染时间,因为您必须通过相同的矩阵 go 以在其原始坐标中渲染 SCNPlane。

转换为UIImageCGImageRef是一项昂贵的操作。 它以非最佳格式创建图像的 CPU 表示,然后需要再次转换为 GPU 表示 ( MTLTexture )。 SceneKit 支持将AVPlayer实例作为材质属性的contents 它应该是最简单和最有效的方法,将一个视频放到一个平面上。

更新:如果您的应用程序管道是围绕CVImageBufferRef (又名CVPixelBufferRef )构建的,那么CVMetalTextureCacheCVMetalTextureCacheCreateTextureFromImage是您应该利用的 API 来有效地生成MTLTexture实例以设置为材质属性的contents

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM