在iOS下逐帧阅读video

我正在寻找一种使用iOS API检索video的各个帧的方法。 我尝试使用AVAssetImageGenerator,但它似乎只提供最接近的秒的帧,这对我的使用来说有点过于粗糙。

根据我对文档的理解,AVAssetReader,AVAssetReaderOutput和CMSampleBufferGetImageBuffer的管道我应该可以做一些事情,但我坚持使用CVImageBufferRef。 有了这个,我正在寻找一种方法来获得CGImageRef或UIImage,但还没有找到它。

不需要实时,我越能坚持提供API越多越好。

非常感谢!

编辑:基于这个网站: http : //www.7twenty7.com/blog/2010/11/video-processing-with-av-foundation和这个问题: 如何将CVImageBufferRef转换为UIImage我即将解决方案。 问题,AVAssetReader在第一个copyNextSampleBuffer之后停止读取而没有给我任何东西(sampleBuffer为NULL)。

该video可由MPMoviePlayerController读取。 我不明白什么是错的。

上面的两个链接实际上回答了我的问题,空的copyNextBufferSample是iOS SDK 5.0b3的问题,它可以在设备上运行。

AVAssetImageGenerator对于抓取的确切帧时间具有非常宽松的默认容差。 它有两个属性来确定容差: requestedTimeToleranceBeforerequestedTimeToleranceAfter 。 这些公差默认为kCMTimePositiveInfinity ,因此如果您想要精确的时间,请将它们设置为kCMTimeZero以获得精确的帧。

(获取精确帧可能需要比近似帧更长的时间,但是您说实时不是问题。)

使用AVReaderWriter 。 虽然它是OS X Apple示例代码,但AVFoundation在两个平台上都可用,几乎没有变化。