3

我正在寻找一个技巧来为 iPhone/iPad 开发一个能够处理视频的应用程序(为简单起见,我们只考虑存储在设备上的本地文件)并实时播放。例如,您可以选择任何电影并选择“旧电影”过滤器,并希望它像在旧灯电视上一样。

为了使这个想法成为现实,我需要实现两个关键功能:

1)从电影文件中抓取帧和音频流并访问单独的帧(我对 BGRA 中的原始像素缓冲区或至少 YUV 颜色空间感兴趣)。

2)以某种方式显示处理过的帧。我知道可以将处理后的帧渲染为 OpenGL 纹理,但我希望拥有更强大的播放控件组件。是否有任何类型的媒体播放器支持播放自定义图像和音频缓冲区?

处理功能完成并且速度很快(小于一帧的持续时间)。

我不是要求现成的解决方案,但欢迎任何提示!

回答

帧抓取。似乎获取视频和音频帧的唯一方法是使用 AVAssetReader 类。尽管不建议将其用于实时抓取,但它确实可以完成工作。在我对 iPad2 的测试中,抓取单帧大约需要 7-8 毫秒。在视频中寻找是一个棘手的问题。也许有人可以指出更有效的解决方案?

视频播放。我已经使用自定义视图和 GLES 完成了此操作,以渲染其中包含视频帧的矩形纹理。据我所知,这是绘制位图的最快方法。

问题

  • 需要手动播放声音样本
  • AVAssetReader 抓取应与电影帧速率同步。否则电影会过快或过慢。
  • AVAssetReader 只允许连续的帧访问。你不能向前和向后寻找。唯一建议的解决方案是删除旧阅读器并创建一个具有修剪时间范围的新阅读器。
4

2 回答 2

0

您可以使用 AVPlayer+ AVPlayerItem,它为您提供了在显示图像上应用过滤器的机会。

于 2017-12-20T12:59:25.370 回答