從資產(chǎn)讀取媒體數(shù)據(jù)的對(duì)象。
使用 Asset Reader 從 AVAsset 實(shí)例讀取媒體數(shù)據(jù)。讀取的 Asset 可能基于文件,例如 QuickTime 影片或 MPEG-4 文件,也可能使用 AVComposition 從多個(gè)來(lái)源合成的媒體。
- 創(chuàng)建一個(gè)對(duì)象來(lái)從資產(chǎn)中讀取媒體數(shù)據(jù)。
- (nullable instancetype)initWithAsset:(AVAsset *)asset error:(NSError * _Nullable * _Nullable)outError
2.從資產(chǎn)讀取樣本緩沖區(qū)的狀態(tài)。
此屬性的值是一個(gè) AVAssetReaderStatus 類型,用于指示讀取是否正在進(jìn)行、已成功完成、已取消或已失敗。AVAssetReaderOutput 對(duì)象的客戶端應(yīng)在 -[AVAssetReaderOutput copyNextSampleBuffer] 返回 NULL 后檢查此屬性的值,以確定無(wú)法讀取更多樣本的原因。此屬性是線程安全的。
當(dāng) AVAssetReaderOutput 上的 copyNextSampleBuffer 方法返回 nil 時(shí)檢查此屬性的值,以確定輸出無(wú)法讀取更多數(shù)據(jù)的原因。
@property (readonly) AVAssetReaderStatus status;
- 如果接收器的狀態(tài)為 AVAssetReaderStatusFailed,則描述導(dǎo)致失敗的錯(cuò)誤。
此屬性的值是一個(gè) NSError,描述導(dǎo)致接收器無(wú)法讀取其資源的原因。如果接收器的狀態(tài)不是 AVAssetReaderStatusFailed,則此屬性的值為 nil。此屬性是線程安全的。
@property (readonly, nullable) NSError *error;
- 指定可能限制接收器資產(chǎn)中讀取媒體數(shù)據(jù)的時(shí)間部分的時(shí)間范圍。
timeRange 的值與 CMTimeRangeMake(kCMTimeZero, asset.duration) 的交集將確定讀取媒體數(shù)據(jù)的 Asset 的時(shí)間范圍。timeRange 的默認(rèn)值為 CMTimeRangeMake(kCMTimeZero, kCMTimePositiveInfinity)。
如果在讀取開(kāi)始后設(shè)置值,則此屬性會(huì)引發(fā)異常。
@property (nonatomic) CMTimeRange timeRange;
- 接收器客戶端可以從中讀取媒體數(shù)據(jù)的輸出。
該數(shù)組包含與閱讀器關(guān)聯(lián)的 AVAssetReaderOutput 的具體實(shí)例??梢允褂?addOutput: 方法將輸出添加到接收器。
@property (nonatomic, readonly) NSArray<AVAssetReaderOutput *> *outputs;
- 測(cè)試是否可以將輸出添加到接收器。
無(wú)法添加從用于初始化接收器的資產(chǎn)以外的資產(chǎn)軌道讀取的輸出。
- (BOOL)canAddOutput:(AVAssetReaderOutput *)output;
- 向接收器添加輸出。
輸出是通過(guò)引用一個(gè)或多個(gè) AVAssetTrack 對(duì)象創(chuàng)建的。這些軌道必須屬于接收器的 asset 屬性所返回的資源。
如果輸出已經(jīng)添加到 AVAssetReader 或讀取已經(jīng)開(kāi)始(“狀態(tài)”已經(jīng)超出 AVAssetReaderStatusUnknown),則此方法拋出異常。
- (void)addOutput:(AVAssetReaderOutput *)output;
- 準(zhǔn)備接收器從資產(chǎn)中讀取樣本緩沖區(qū)。
此方法驗(yàn)證軌道輸出、音頻混音和視頻合成的全部設(shè)置集合,并啟動(dòng)從接收器資產(chǎn)讀取。
如果此方法返回“否”,客戶端可以通過(guò)檢查 status 和 error 屬性的值來(lái)確定失敗的原因。
如果讀取已開(kāi)始(“status”已超出 AVAssetReaderStatusUnknown 的階段),則此方法會(huì)拋出異常。
- (BOOL)startReading;
- 取消任何后臺(tái)工作并阻止接收器的輸出讀取更多樣本。
想要在到達(dá)時(shí)間范圍結(jié)束之前停止從接收器讀取樣本的客戶端應(yīng)調(diào)用此方法來(lái)停止可能正在進(jìn)行的任何后臺(tái)預(yù)讀操作。
此方法不應(yīng)與對(duì) -[AVAssetReaderOutput copyNextSampleBuffer] 的任何調(diào)用同時(shí)調(diào)用
- (void)cancelReading;