Reading a Asset
每个AVAssetReader对象只能关联一个Asset,但是这个Asset可以包含多个Track。
在读取media data之前你必须给AVAssetReader创建的对象设置一个AVAssetReaderOutput。
AVAssetReaderOutput有三个子类:
AVAssetReaderTrackOutput AVAssetReaderAudioMixOutput AVAssetReaderVideoCompositionOutput
Creating the Assert Reader
Setting Up the Asset Reader Outputs
在创建完asset reader之后,至少为其设置一个output。
在配置outputs时确保alwaysCopiesSampleData属性为NO。
如果你仅仅是从一个track或多个track读取media data,或者可能将media data转化成另一种数据格式,
使用AVAssertReaderTrackOutput这个类。为你想读取Asset中每一个AVAssetTrack对象添加一个track output对象。
使用一个asset reader解压一个audio track为Linear PCM过程如下:
你可以使用AVssetReaderAudioMixOutput和AVAssetReaderVideoCompostitionOutput类读取
使用AVAudioMix或者AVVideoComposition对象编辑后的media data相对应的。通常情况下上述
两个output用在asset reader从AVCompostion对象读取media data时。
a single audio mix output,你可以使用AVAudioMix对象将从asset中读取多个audio tracks mix(组合)在一起。
在AVAssetReaderAudioMixOutput实例化之后 audio tracks是怎么样被mixed(组合在一起),
下面的代码说明如何使用asset中的所有audio tracks创建一个audio mix output ,解压audio tracks为Linear PCM ,
并把一个audio mix 对象值给output。
video composition output 的使用与audio mix output相似,
你可以使用AVVideoCoposition对象将从asset读取多个video tracks合成
从多个composited video tracks读取数据 ,解压成ARGB 并设置output过程如下:
Reading the Asset's Media Data
在设置好所有的outputs之后,调用asset reader的startReading方法开始读取数据。
然后对每个output调用copyNextSampleBuffer方法取回media data,代码如下:
网友评论