写在前面
喜欢AVFoundation资料的同学可以关注我的专题:《AVFoundation》专辑
也可以关注我的简书账号
正文
AVAssetReader提供从asset获取媒体数据的服务。
数据结构
AVAssetReader数据结构如下:

AVAssetReader
AVAssetReaderStatus
AVAssetReaderStatus是一个枚举类型:
typedef NS_ENUM(NSInteger, AVAssetReaderStatus) {
AVAssetReaderStatusUnknown = 0,
AVAssetReaderStatusReading,
AVAssetReaderStatusCompleted,
AVAssetReaderStatusFailed,
AVAssetReaderStatusCancelled,
};
下面这些常量由AVAssetReader状态属性返回,以指示它是否可以成功读取其asset中的样本。
AVAssetReaderStatusUnknown |
表示当前未知asset reader的状态。 |
|---|---|
AVAssetReaderStatusReading |
表示asset reader已成功从其asset中读取样本。 |
AVAssetReaderStatusCompleted |
表示asset reader已成功读取其时间范围内的所有样本。 |
AVAssetReaderStatusFailed |
表示由于错误,asset reader无法再从其asset中读取样本。该错误由asset reader的错误属性的值描述。 |
AVAssetReaderStatusCancelled |
表示asset reader无法再读取样本,因为使用cancelReading方法取消了读取。 |
AVAssetReader
+ (nullable instancetype)assetReaderWithAsset:(AVAsset *)asset error:(NSError * _Nullable * _Nullable)outError;
| 函数名 | assetReaderWithAsset:error: |
|---|---|
| 解释 | 返回AVAssetReader的实例,用于从指定asset中读取媒体数据。 |
| 参数 |
asset:要从中读取媒体数据的 asset。outError:返回时,如果 AVAssetReader的初始化失败,则指向描述失败性质的NSError。 |
| 返回值 | 返回一个AVAssetReader实例 |
| 备注 | 如果指定的asset属于AVAsset,AVMutableComposition或AVMutableMovie的可变子类,则在调用-startReadin后改变asset时,任何asset读取操作的结果都是未定义的。 |
- (nullable instancetype)initWithAsset:(AVAsset *)asset error:(NSError * _Nullable * _Nullable)outError NS_DESIGNATED_INITIALIZER;
| 函数名 | initWithAsset:error: |
|---|---|
| 解释 | 创建AVAssetReader实例,以便从指定asset中读取媒体数据。 |
| 参数 |
asset:要从中读取媒体数据的 asset。outError:返回时,如果 AVAssetReader的初始化失败,则指向描述失败性质的NSError。 |
| 返回值 | 返回一个AVAssetReader实例 |
| 备注 | 如果指定的asset属于AVAsset,AVMutableComposition或AVMutableMovie的可变子类,则在调用-startReading后改变asset时,任何asset读取操作的结果都是未定义的。 |
@property (nonatomic, retain, readonly) AVAsset *asset;
| 属性名 | asset |
|---|---|
| 解释 | 接收器输出读取样本缓冲区的asset。 |
| 备注 | 此属性的值是AVAsset。使用特定AVAssetTrack实例创建的AVAssetReader的具体实例必须从此属性返回的asset中获取这些轨道。 |
@property (readonly) AVAssetReaderStatus status;
| 属性名 | status |
|---|---|
| 解释 | 从接收者的asset中读取样本缓冲区的状态。 |
| 备注 | 此属性的值是AVAssetReaderStatus,指示正在读取,已成功完成,已取消或已失败。AVAssetReaderOutput对象的客户端应在- [AVAssetReaderOutput copyNextSampleBuffer]返回NULL后检查此属性的值,以确定无法读取更多样本的原因。此属性是线程安全的。 |
@property (readonly, nullable) NSError *error;
| 属性名 | error |
|---|---|
| 解释 | 如果接收方的状态为AVAssetReaderStatusFailed,则说明导致失败的错误。 |
| 备注 | 此属性的值是一个NSError,它描述了导致接收器无法再读取其asset的原因。如果接收者的状态不是AVAssetReaderStatusFailed,则此属性的值为nil。此属性是线程安全的。 |
@property (nonatomic) CMTimeRange timeRange;
| 属性名 | timeRange |
|---|---|
| 解释 | 指定可以限制接收方asset的时间部分的时间范围,从中读取媒体数据。 |
| 备注 |
timeRange和CMTimeRangeMake(kCMTimeZero,asset.duration)的值的交集将确定将从中读取媒体数据的asset的时间范围。timeRange的默认值是CMTimeRangeMake(kCMTimeZero,kCMTimePositiveInfinity)。 |
@property (nonatomic, readonly) NSArray<AVAssetReaderOutput *> *outputs;
| 属性名 | outputs |
|---|---|
| 解释 | 接收器的客户端可以读取媒体数据的输出。 |
| 备注 | 此属性的值是包含AVAssetReaderOutput的具体实例的NSArray。可以使用addOutput:方法将输出添加到接收器。 |
- (BOOL)canAddOutput:(AVAssetReaderOutput *)output;
| 属性名 | canAddOutput: |
|---|---|
| 解释 | 测试是否可以将输出添加到接收器。 |
| 参数 |
output:要测试的 AVAssetReaderOutput对象。 |
| 返回值 | 返回一个指示是否可以将输出添加到接收器的BOOL类型结果。 |
| 备注 | 无法添加从用于初始化接收器的asset以外的asset的轨道读取的输出。 |
- (void)addOutput:(AVAssetReaderOutput *)output;
| 函数名 | addOutput: |
|---|---|
| 解释 | 将输出添加到接收器。 |
| 参数 |
output:要添加的 AVAssetReaderOutput对象。 |
| 备注 | 通过引用一个或多个AVAssetTrack对象创建输出。这些轨道必须由接收方asset属性返回的asset所有。读取开始后就无法再添加输出。 |
- (BOOL)startReading;
| 函数名 | startReading |
|---|---|
| 解释 | 准备接收器以从asset中读取样本缓冲区。 |
| 返回值 | 返回一个指示是否可以开始阅读的BOOL类型返回值。 |
| 备注 | 此方法验证轨道输出,音频混合和视频合成的整个设置集合,并启动从接收器的asset读取的设置。如果此方法返回NO,则客户端可以通过检查状态和错误属性的值来确定故障的性质。 |
- (void)cancelReading;
| 函数名 | cancelReading |
|---|---|
| 解释 | 取消任何后台工作并防止接收器的输出读取更多样本。 |
| 备注 | 想要在到达时间范围结束之前停止从接收器读取样本的客户端应该调用此方法来停止可能正在进行的任何后台预读操作。 不可以在调用 - [AVAssetReaderOutput copyNextSampleBuffer]同时调用此方法。 |
| 上一章 | 目录 | 下一章 |
|---|