【问题标题】:How to decode multiple videos simultaneously using AVAssetReader?如何使用 AVAssetReader 同时解码多个视频?
【发布时间】:2015-04-29 08:46:17
【问题描述】:

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

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

这可行吗?

【问题讨论】:

标签: ios objective-c video avassetreader


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多