AVFoundation编程指南14-AVAssetReader
2019-05-29 本文已影响0人
张芳涛
写在前面
喜欢AVFoundation资料的同学可以关注我的专题:《AVFoundation》专辑
也可以关注我的简书账号
正文
AVAssetReader
提供从asset
获取媒体数据的服务。
数据结构
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] 同时调用此方法。 |
上一章 | 目录 | 下一章 |
---|