如何使用Open GL ES 2.0(着色器)进行视频处理?

时间:2015-06-30 17:13:23

标签: ios opengl-es-2.0

这个问题是关于iOS的。在Android上,使用OpenGL ES 2.0在视图上呈现纹理(用于预览)或将其发送到编码器(用于文件写入)非常容易。我还没有能够在iOS上找到任何教程来实现视频播放(从文件预览视频效果)和视频录制(保存具有效果的视频)和着色器效果。 iOS有什么可能吗?

我发现了一个名为GLCameraRipple的着色器的演示,但我不知道如何更普遍地使用它。例如:AVFoundation

[编辑]

在搜索代码段时,我在this tutorial about OpenGL ES, AVFoundation and video merging on iOS上踩踏了。那是另一个有趣的入口。

1 个答案:

答案 0 :(得分:3)

它在iOS领域都是非常低级的东西,有很多东西要连接。

您可能感兴趣的主要内容是CVOpenGLESTextureCache。正如CV前缀所暗示的那样,它是Core Video的一部分,在这种情况下,它的主要兴趣点是class Foo { } ,其中"在图像缓冲区和底层纹理对象之间创建一个实时绑定" ;。该文档进一步为您提供了关于使用CVOpenGLESTextureCacheCreateTextureFromImage这样的图像的明确建议 - 即返回的纹理ID既可用作OpenGL的源也可用作OpenGL的目的地。

绑定图像缓冲区将绑定到CVImageBuffer,其中一种类型为CVPixelBuffer。您可以为连接到AVAssetWriterInputPixelBufferAdaptorAVAssetWriter提供像素缓冲区,以便输出到视频。

另一方面,附加到AVAssetReaderOutputAVAssetReader将会CMSampleBuffers,可以查询附加的图片缓冲区(如果您有视频进来而不是只需要音频,然后就可以通过纹理缓存映射到OpenGL中。