从资产读取媒体数据的对象。
使用 Asset Reader 从 AVAsset 实例读取媒体数据。读取的 Asset 可能基于文件,例如 QuickTime 影片或 MPEG-4 文件,也可能使用 AVComposition 从多个来源合成的媒体。
- 创建一个对象来从资产中读取媒体数据。
- (nullable instancetype)initWithAsset:(AVAsset *)asset error:(NSError * _Nullable * _Nullable)outError
2.从资产读取样本缓冲区的状态。
此属性的值是一个 AVAssetReaderStatus 类型,用于指示读取是否正在进行、已成功完成、已取消或已失败。AVAssetReaderOutput 对象的客户端应在 -[AVAssetReaderOutput copyNextSampleBuffer] 返回 NULL 后检查此属性的值,以确定无法读取更多样本的原因。此属性是线程安全的。
当 AVAssetReaderOutput 上的 copyNextSampleBuffer 方法返回 nil 时检查此属性的值,以确定输出无法读取更多数据的原因。
@property (readonly) AVAssetReaderStatus status;
- 如果接收器的状态为 AVAssetReaderStatusFailed,则描述导致失败的错误。
此属性的值是一个 NSError,描述导致接收器无法读取其资源的原因。如果接收器的状态不是 AVAssetReaderStatusFailed,则此属性的值为 nil。此属性是线程安全的。
@property (readonly, nullable) NSError *error;
- 指定可能限制接收器资产中读取媒体数据的时间部分的时间范围。
timeRange 的值与 CMTimeRangeMake(kCMTimeZero, asset.duration) 的交集将确定读取媒体数据的 Asset 的时间范围。timeRange 的默认值为 CMTimeRangeMake(kCMTimeZero, kCMTimePositiveInfinity)。
如果在读取开始后设置值,则此属性会引发异常。
@property (nonatomic) CMTimeRange timeRange;
- 接收器客户端可以从中读取媒体数据的输出。
该数组包含与阅读器关联的 AVAssetReaderOutput 的具体实例。可以使用 addOutput: 方法将输出添加到接收器。
@property (nonatomic, readonly) NSArray<AVAssetReaderOutput *> *outputs;
- 测试是否可以将输出添加到接收器。
无法添加从用于初始化接收器的资产以外的资产轨道读取的输出。
- (BOOL)canAddOutput:(AVAssetReaderOutput *)output;
- 向接收器添加输出。
输出是通过引用一个或多个 AVAssetTrack 对象创建的。这些轨道必须属于接收器的 asset 属性所返回的资源。
如果输出已经添加到 AVAssetReader 或读取已经开始(“状态”已经超出 AVAssetReaderStatusUnknown),则此方法抛出异常。
- (void)addOutput:(AVAssetReaderOutput *)output;
- 准备接收器从资产中读取样本缓冲区。
此方法验证轨道输出、音频混音和视频合成的全部设置集合,并启动从接收器资产读取。
如果此方法返回“否”,客户端可以通过检查 status 和 error 属性的值来确定失败的原因。
如果读取已开始(“status”已超出 AVAssetReaderStatusUnknown 的阶段),则此方法会抛出异常。
- (BOOL)startReading;
- 取消任何后台工作并阻止接收器的输出读取更多样本。
想要在到达时间范围结束之前停止从接收器读取样本的客户端应调用此方法来停止可能正在进行的任何后台预读操作。
此方法不应与对 -[AVAssetReaderOutput copyNextSampleBuffer] 的任何调用同时调用
- (void)cancelReading;