如何使用AVFoundation从视频流中获取原始格式的图像缓冲区?

时间:2018-05-05 08:07:36

标签: avfoundation avasset avassetreader cmsamplebufferref

在Apple的AVAssetReaderTrackOutput文档中,它指出了使用outputSettings

实例化实例时+[AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:outputSettings:]的参数的以下内容
  

值为nil将输出配置为以指定曲目存储的原始格式提供样本。

在例如使用它时如果是MP4视频资产,它似乎会以解码顺序逐帧(即无序显示),但使用CMSampleBufferRef传递给CMSampleBufferGetImageBuffer个对象的所有查询都会产生NULL CVImageBufferRef个对象。

我可以确保传送图像缓冲区对象的唯一方法是为outputSettings:提供像素缓冲区格式,例如kCVPixelFormatType_32ARGB字典条目的kCVPixelBufferPixelFormatTypeKey

这样做的另一个有趣的副作用是,然后以显示顺序传递帧,并且抽象/隐藏帧的基础解码顺序。

为什么会出现这种情况?

1 个答案:

答案 0 :(得分:0)

就像您期望的那样,将outputSettings设置为nil会导致输出本机格式的视频帧,但事实并非如此,您必须指定一些内容才能获得有效的{{1 }}。

所有内容都不会丢失,使用“几乎没有”字典似乎以其原始格式输出帧,

CVSampleBufferRef

IOSurfaceOptions仅是默认设置-进一步阅读以供参考:https://developer.apple.com/documentation/corevideo/kcvpixelbufferiosurfacepropertieskey?language=objc