【问题标题】:Alternatives to creating an openGL texture from a captured video frame to overlay an openGL view over video? (iPhone)从捕获的视频帧创建openGL纹理以覆盖视频上的openGL视图的替代方法? (苹果手机)
【发布时间】:2010-12-17 19:01:07
【问题描述】:

这主要与增强现实类型的应用程序相关。 Apple 在此处提供了有关如何使用 AVCaptureSession 捕获视频帧(并在需要时将其另存为图像)的信息:

http://developer.apple.com/library/ios/#qa/qa2010/qa1702.html

我知道可以从捕获的视频帧中创建一个 openGL 纹理,然后将其用作 openGL 视图中的背景,以覆盖其他图形。

我想知道这种方法是否有任何替代方法?上面提到的方法可能是最好的(我不知道是不是),但如果有其他方法可以尝试,最好知道。例如,有没有办法将 openGL 视图直接覆盖在 AVCaptureVideoPreviewLayer 上?

【问题讨论】:

    标签: iphone opengl-es avcapturesession


    【解决方案1】:

    您确实可以在 AVCaptureVideoPreviewLayer 之类的东西上分层 OpenGL 内容,但您的性能会受到影响。 Apple 强烈建议您不要将不透明的 OpenGL ES 内容覆盖在其他显示元素之上。来自OpenGL ES Programming Guide for iOS

    为了获得绝对的最佳性能, 您的应用程序应仅依赖于 OpenGL ES 来渲染你的内容。到 这样做,调整容纳你的视图的大小 CAEAGLLayer 对象来匹配 屏幕,将其 opaque 属性设置为 是,并确保没有其他核心 动画层或视图是可见的。 如果您的 OpenGL ES 层是合成的 在其他层之上,使您的 CAEAGLLayer 对象不透明减少但 不会消除性能 成本。

    如果您的 CAEAGLLayer 对象是混合的 在它下面的层之上 层层次结构,渲染缓冲区的 颜色数据必须在预乘 要合成的 alpha 格式 由核心动​​画正确。混合 OpenGL ES 内容在其他之上 内容表现严重 罚款。

    老实说,将视频作为纹理拉入,然后将其显示为 3-D 叠加层后面的广告牌并不难。我的示例应用程序here 将相机视频传递到OpenGL ES (2.0) 纹理以显示到屏幕上。只需进行一些修改,您就可以在其上放置 3-D 内容。与尝试在 AVCaptureVideoPreviewLayer 之上绘制非透明 3-D 内容相比,这将为您提供更好的性能。

    但是,如果您只想在 OpenGL ES 内容上显示简单的静态 UIView,则可以在没有太多性能损失的情况下完成(根据我的经验,帧速率降低了约 5%)。

    【讨论】:

    • 谢谢。我将视频作为纹理拉入没有问题,但我不确定哪种技术会产生最佳性能(创建/绑定纹理与分层)。您指向 Apple 文档的链接和您自己的代码非常有帮助。我正在做一些与您的代码非常相似的事情,并且大部分内容都已到位。谢谢。
    • @BradLarson 如果我们将 AVCaptureVideoPreviewLayer 放置在 OpenGL ES 内容之上,会有任何性能问题吗?
    • @entropy - 如果你说的是一个不透明的 OpenGL ES 托管视图,那与将其他 UIViews 放在它前面不会有太大的不同。当然,您必须首先对此进行分析,以了解真正的影响是什么,因为额外的合成工作量可能会减慢速度。不过,最好将相机视频输入 OpenGL ES 纹理并在场景中显示它。例如,我的 GPUImage 框架可以做到这一点,但是编写从 AVFoundation 到纹理的代码非常容易。
    【解决方案2】:

    当然,无论内容如何,​​视图都可以分层。在视频上分层 GL 与在 2D 上分层 2D 没有什么不同。

    唯一需要注意的是,您需要渲染 GL 内容,以便生成的图像预乘 alpha(就像 iOS 上的所有其他透明内容都是预乘一样)。

    【讨论】:

    • 谢谢。一开始我没有考虑预乘所有内容。
    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2012-05-13
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多