如何使用AVAssetReader同时解码多个视频?

时间:2015-04-29 08:46:18

标签: ios objective-c video avassetreader

我正在尝试解码多个视频文件中的帧,并将它们用作opengl纹理。

我知道如何使用AVAssetReader对象解码h264文件,但是当startReading为{{while时,您在status循环中调用AVAssetReaderStatusReading后必须阅读这些帧1}}。我想要做的是拨打startReading,然后随时随地拨打copyNextSampleBuffer。通过这种方式,我可以从AVAssetReader创建一个新的视频阅读器类,并且只要我想将它们用作opengl纹理,就可以从多个视频文件中加载视频帧。

这可行吗?

1 个答案:

答案 0 :(得分:0)

简短回答是肯定的,您可以一次解码一帧。您需要自己管理解码逻辑,最简单的方法是分配BGRA像素的缓冲区,然后将帧缓冲区数据复制到临时缓冲区中。请注意,您可能无法找到执行此操作的小代码snippit。事实上,将电影中的所有数据流式传输到OpenGL并不容易实现。我建议你自己避免尝试这样做并使用已经实现了硬件的第三方库。如果您想查看已经实现的类似内容的完整示例,那么您可以查看我的博客帖子Load OpenGL textures with alpha channel on iOS。这篇文章展示了如何将视频流式传输到OpenGL,但您需要先使用这种方法从h.264解码到磁盘。还应该可以使用其他库来执行相同的操作,请记住,同时播放多个视频是资源密集型的,因此您可能会遇到可以快速在硬件设备上执行的操作的限制。此外,如果您实际上不需要OpenGL纹理,那么直接在iOS下运行CoreGraphics API要容易得多。