解码iPhone GPU上的视频帧

sim*_*n.d 15 iphone gpgpu opengl-es video-processing ios

我正在寻找解码iPhone上本地mpeg-4视频帧的最快方法.我只是对每10帧中像素的亮度值感兴趣.我不需要在任何地方渲染视频.

我已经尝试过ffmpeg,AVAssetReader,ImageAssetGenerator,OpenCV和MPMoviePlayer,但它们都太慢了.我能得到的最快速度是2倍(一分钟内扫描2分钟).我想要接近10倍的东西.

假设我上面的尝试没有使用GPU,有没有办法用GPU上运行的东西来实现我的目标?OpenGL似乎主要用于渲染输出,但我已经看到它用作传入视频的过滤器.也许这是一个选择?

提前致谢!

Dun*_*n C 3

如果您愿意使用仅限 iOS 5 的解决方案,请查看 AVCaputureSession 上 2011 年 WWDC 会议上的示例应用程序 ChromaKey。

该演示从内置摄像头捕获 30 FPS 的视频,并将每一帧作为纹理传递给 OpenGL。然后,它使用 OpenGL 来操作帧,并可选择将结果写入输出视频文件。

该代码使用一些严重的低级魔法将核心视频像素缓冲区从 AVCaptureSession 绑定到 OpenGL,以便它们共享图形硬件中的内存。

更改 AVCaptureSession 以使用电影文件作为输入而不是相机输入应该相当简单。

您可以将会话设置为以 Y/UV 形式而不是 RGB 形式传送帧,其中 Y 分量是亮度。如果做不到这一点,编写一个将每个像素的 RGB 值转换为亮度值的着色器将是一件非常简单的事情。

您应该能够在所有帧上执行所有这些操作,而不仅仅是每 10 帧。