我正在寻找一种使用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可以读取视频。我不明白什么是错的。
答案 0 :(得分:1)
上面的两个链接实际上回答了我的问题,空的copyNextBufferSample
是iOS SDK 5.0b3的问题,它可以在设备上运行。
答案 1 :(得分:1)
AVAssetImageGenerator
对于抓取的确切帧时间具有非常宽松的默认容差。它有两个确定容差的属性:requestedTimeToleranceBefore
和requestedTimeToleranceAfter
。这些容差默认为kCMTimePositiveInfinity
,因此如果您需要准确的时间,请将它们设置为kCMTimeZero
以获得精确的帧。
(抓取确切的帧可能需要比近似帧更长的时间,但是你说实时不是问题。)
答案 2 :(得分:0)
使用AVReaderWriter。虽然它是OS X Apple示例代码,但AVFoundation可在两个平台上使用,几乎没有变化。