使用Metal/OpenGL ES在iOS中渲染视频

3 video rendering opengl-es ios metal

如何使用Metal或OpenGL ES渲染视频?

我说的解码显示 由我自己.

我很新Metal,OpenGL ES而且我不知道从哪里开始.

Bra*_*son 9

对于刚开始使用此功能的人来说,你所要求的并不是微不足道的,所以你可能想把它分解成更小的部分.也就是说,我已经这样做了,可以描述一般过程.

首先,您将从AVAssetReader开始,并为音频和视频轨道设置AVAssetReaderOutputs.从那些,您迭代CMSampleBufferRefs.对于每个视频帧,您将提取CVImageBufferRef.

将视频帧上传到OpenGL纹理可以采用几种不同的方式.最高效的路径是使用YUV数据并通过iOS的纹理缓存上传Y和UV平面.然后,您将使用YUV - > RGB着色器组合这些平面并转换为RGB色彩空间以进行处理或显示.

您还可以使用电影文件中的BGRA数据并将其直接上传到纹理中,但这个过程会产生更多开销.但它更简单,并且不需要手动颜色转换着色器.

之后,您将使用passthrough顶点和片段着色器获取纹理并将其渲染为四边形,或者您可以对视频执行基于着色器的处理.

存在类似的上传到Metal的过程和路径,起点也是一样的.

现在,如果您不想手动实现所有这些,我编写了一个名为GPUImage的开源框架,它封装了这个.它有Objective-CSwift两种.如果您不想拉动整个框架,请关注GPUImageMovie(对于前者)或MovieInput(对于后者)类.它们包含执行此操作所需的所有代码,因此您可以在那里提取实现并直接使用它们.

  • 非常感谢你做的这些。我什至要花几周的时间才能提出概念证明。 (2认同)