在iOS下逐帧读取视频



我正在寻找一种方法来检索使用iOS API的视频的各个帧。我尝试使用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)。

视频是MPMoviePlayerController可读的。我不知道怎么了。

上面的两个链接实际上回答了我的问题,空的copyNextBufferSample是iOS SDK 5.0b3的问题,它在设备上工作

AVAssetImageGenerator对于被抓取的确切帧时间具有非常宽松的默认容差。它有两个决定容忍度的特性:requestedTimeToleranceBeforerequestedTimeToleranceAfter。这些公差默认为kCMTimePositiveInfinity,所以如果你想要精确的时间,将它们设置为kCMTimeZero以获得精确的帧数。

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

使用AVReaderWriter。虽然它是一个OS X Apple的示例代码,但AVFoundation在两个平台上都可以使用,只需做一些更改。

相关内容

  • 没有找到相关文章

最新更新