在iOS下逐帧阅读视频

时间:2011-07-21 21:45:02

标签: ios video frame avfoundation core-video

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

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

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

非常感谢!

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

MPMoviePlayerController可以读取视频。我不明白什么是错的。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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