AVFoundation Export

2019-05-27  本文已影响0人  程序猿小bai

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,代码如下:


上一篇下一篇

猜你喜欢

热点阅读