ios - iOS视频处理的最佳实践

标签 ios video opengl-es-2.0 video-processing core-image

我一直在研究使用最新技术在iOS上进行视频处理的最佳方法,并获得了一些不同的结果。似乎有办法使用Core Image,OpenGL和一些开源框架来做到这一点。我想避开开源选项,只是为了了解幕后发生的事情,所以问题是:

在iOS上处理预录制视频的最佳选择是什么(滤镜,亮度,对比度等)?

我知道Core Image有很多很棒的内置过滤器,并且具有相对简单的API,但是我还没有找到有关如何将视频实际分解为图像然后对其重新编码的任何资源。谢谢,关于这个主题的任何帮助将非常有用。

最佳答案

如您陈述的那样,您有几种选择。您认为哪种“最佳”将取决于您的特定需求。

您最简单的非开源途径可能是使用Core Image。从Core Image视频过滤中获得最佳性能仍然需要花些功夫,因为您需要确保为此进行GPU端处理。

在我的GPUImage框架中的a benchmark application中,我具有以优化方式使用Core Image的代码。为此,我设置了AV Foundation视频捕获并从像素缓冲区创建了CIImage。将Core Image上下文设置为渲染为OpenGL ES上下文,并将其上的属性(颜色空间等)设置为快速渲染。当我与他们讨论此设置时,Core Image团队会建议使用这些设置。

我谈论的是原始OpenGL ES路线,它涉及here(并在那里有链接的示例应用程序),但是它确实需要一些设置。它可以给您比Core Image多一点的灵活性,因为您可以编写完全自定义的着色器,以用Core Image中可能无法使用的方式来操纵图像。过去,这比Core Image快,但如今实际上没有性能差距。

但是,构建自己的OpenGL ES视频处理管道并不简单,它涉及许多样板代码。这就是为什么我写了this,我和其他人投入了大量时间进行性能和易用性的调整。如果您担心不了解这一切如何工作,请通读该框架内的GPUImageVideo类代码。这就是从摄像机拉帧并开始视频处理操作的原因。它比我的基准测试应用程序复杂一点,因为它在大多数情况下从相机中获取YUV平面帧并将其转换为着色器中的RGBA,而不是获取原始RGBA帧。后者要简单一些,但是前者要有性能和内存优化。

以上所有都是关于实时视频的,但是预录制的视频几乎相同,只是使用了不同的AV Foundation输入类型。我的GPUImageMovie类中包含代码,可以接收预先录制的电影并处理其中的各个帧。它们最终与您从相机捕获的帧位于同一位置。

关于ios - iOS视频处理的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015496/

相关文章:

ios - OpenGL ES 2.0 (iOS) 中的二维绘图

Android OpenGL ES 2.0 黑色纹理

ios - OpenGL ES 2.0 的学习曲线是否比 Metal 更陡峭?

ios - 为 i386/armv7 构建 Sofia SIP

后台 iOS 文字转语音

video - MPlayer 不播放来自同一来源的特定类型内容的 HTTP 视频流

python - ffmpeg合并音视频错误: could not find codec parameters

css - HTML5 视频标签上不需要的背景颜色/伪像

ios - 如何在 traitCollectionDidChange 的 View Controller 中更改 UIImageView 图像

ios - TableView 单元格的索引路径不可访问