如何在 iOS 中实时从磁盘读取视频文件

How to read a video file from disk in real time in iOS

我想逐帧读取电影文件,运行 对每一帧进行一些图像处理算法,然后在 iOS 应用程序中按顺序显示结果帧。有一些机制可以使用实时摄像机馈送来执行此操作,例如使用 AVCaptureSession,我想对已保存到磁盘的电影执行类似的操作。

我正在尝试使用 AVAssetReader 和 AVAssetReaderTrackOutput 来执行此操作,但是在 this 文档中,它明确指出 "AVAssetReader 不适用于实时源,并且它的不能保证实时操作的性能

所以我的问题是:实时读取电影帧的正确方法是什么?

编辑:

为了进一步阐明我所说的“实时”是什么意思,请考虑这样一个事实,即可以从相机馈送中捕获帧,运行每个帧上的一些计算机视觉算法(即对象检测、过滤等),并以合理的帧速率(30 - 60 FPS)显示过滤后的帧。我想做完全相同的事情,除了输入源是已经保存在磁盘上的视频。

我不想读取整部电影,处理整个事情,并且只在整个处理管道完成后才显示结果(我认为那是非实时的)。我希望逐帧处理,为此必须实时逐帧读取文件。

为了实时播放和处理视频,您可以使用 AVPlayer class。实时处理视频帧的最简单方法是通过 AVPlayerItem.

上的自定义视频合成

您可能想查看 Apple 的 this sample project,他们使用 Core Image 滤镜在视频中突出显示 HDR 部分。它显示了实时处理和回放所需的整个设置。