您如何使用 Open GL ES 2.0(着色器)进行视频处理?
How do you use Open GL ES 2.0 (shaders) for video processing?
这个问题是关于 iOS 的。在 Android,使用 OpenGL ES 2.0 在视图上渲染纹理(用于预览)或将其发送到编码器(用于文件写入)非常容易。我没能在 iOS 上找到任何使用着色器效果实现视频播放(从文件预览视频效果)和视频录制(保存带有效果的视频)的教程。 iOS 可以吗?
我看过一个名为 GLCameraRipple 的关于着色器的演示,但我不知道如何更通用地使用它。例如:使用 AVFoundation
。
[编辑]
我在搜索片段时踩到了 this tutorial about OpenGL ES, AVFoundation and video merging on iOS。那是另一个有趣的入口门。
在 iOS 大陆上都是非常低级的东西,有一大堆东西要连接。
您可能感兴趣的主要内容是 CVOpenGLESTextureCache
。正如 CV 前缀所暗示的那样,它是核心视频的一部分,在这种情况下,它的主要兴趣点是 CVOpenGLESTextureCacheCreateTextureFromImage
,其中 "creates a live binding between the image buffer and the underlying texture object"。该文档进一步为您提供了关于使用此类图像的明确建议 GL_COLOR_ATTACHMENT
— 即返回的纹理 ID 可用作 OpenGL 的源和目标。
绑定的图像缓冲区将绑定到 CVImageBuffer
, one type of which is a CVPixelBuffer
. You can supply pixel buffers to an AVAssetWriterInputPixelBufferAdaptor
wired to an AVAssetWriter
以便输出到视频。
在另一个方向,一个 AVAssetReaderOutput
attached to a AVAssetReader
will vend CMSampleBuffer
s 可以查询附加的图像缓冲区(如果你有视频输入而不仅仅是音频,那么会有一些)然后可以映射到通过纹理缓存的 OpenGL。
这个问题是关于 iOS 的。在 Android,使用 OpenGL ES 2.0 在视图上渲染纹理(用于预览)或将其发送到编码器(用于文件写入)非常容易。我没能在 iOS 上找到任何使用着色器效果实现视频播放(从文件预览视频效果)和视频录制(保存带有效果的视频)的教程。 iOS 可以吗?
我看过一个名为 GLCameraRipple 的关于着色器的演示,但我不知道如何更通用地使用它。例如:使用 AVFoundation
。
[编辑]
我在搜索片段时踩到了 this tutorial about OpenGL ES, AVFoundation and video merging on iOS。那是另一个有趣的入口门。
在 iOS 大陆上都是非常低级的东西,有一大堆东西要连接。
您可能感兴趣的主要内容是 CVOpenGLESTextureCache
。正如 CV 前缀所暗示的那样,它是核心视频的一部分,在这种情况下,它的主要兴趣点是 CVOpenGLESTextureCacheCreateTextureFromImage
,其中 "creates a live binding between the image buffer and the underlying texture object"。该文档进一步为您提供了关于使用此类图像的明确建议 GL_COLOR_ATTACHMENT
— 即返回的纹理 ID 可用作 OpenGL 的源和目标。
绑定的图像缓冲区将绑定到 CVImageBuffer
, one type of which is a CVPixelBuffer
. You can supply pixel buffers to an AVAssetWriterInputPixelBufferAdaptor
wired to an AVAssetWriter
以便输出到视频。
在另一个方向,一个 AVAssetReaderOutput
attached to a AVAssetReader
will vend CMSampleBuffer
s 可以查询附加的图像缓冲区(如果你有视频输入而不仅仅是音频,那么会有一些)然后可以映射到通过纹理缓存的 OpenGL。