繁体   English   中英

iOS视频处理的最佳实践

[英]Best Practice for iOS video processing

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

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

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

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

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

在我的GPUImage框架中的基准测试应用程序中,我有以优化方式使用Core Image的代码。 为此,我设置了AV Foundation视频捕获并从像素缓冲区创建了CIImage。 将Core Image上下文设置为渲染为OpenGL ES上下文,并将其上的属性(颜色空间等)设置为快速渲染。 当我与他们交谈时,我使用的设置是Core Image团队建议的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM