AVFoundation框架解析(二)AVAssetReader

從資產(chǎn)讀取媒體數(shù)據(jù)的對(duì)象。

使用 Asset Reader 從 AVAsset 實(shí)例讀取媒體數(shù)據(jù)。讀取的 Asset 可能基于文件,例如 QuickTime 影片或 MPEG-4 文件,也可能使用 AVComposition 從多個(gè)來(lái)源合成的媒體。

  1. 創(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;

  1. 如果接收器的狀態(tài)為 AVAssetReaderStatusFailed,則描述導(dǎo)致失敗的錯(cuò)誤。

此屬性的值是一個(gè) NSError,描述導(dǎo)致接收器無(wú)法讀取其資源的原因。如果接收器的狀態(tài)不是 AVAssetReaderStatusFailed,則此屬性的值為 nil。此屬性是線程安全的。

@property (readonly, nullable) NSError *error;

  1. 指定可能限制接收器資產(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;

  1. 接收器客戶端可以從中讀取媒體數(shù)據(jù)的輸出。

該數(shù)組包含與閱讀器關(guān)聯(lián)的 AVAssetReaderOutput 的具體實(shí)例??梢允褂?addOutput: 方法將輸出添加到接收器。

@property (nonatomic, readonly) NSArray<AVAssetReaderOutput *> *outputs;

  1. 測(cè)試是否可以將輸出添加到接收器。

無(wú)法添加從用于初始化接收器的資產(chǎn)以外的資產(chǎn)軌道讀取的輸出。

- (BOOL)canAddOutput:(AVAssetReaderOutput *)output;

  1. 向接收器添加輸出。

輸出是通過(guò)引用一個(gè)或多個(gè) AVAssetTrack 對(duì)象創(chuàng)建的。這些軌道必須屬于接收器的 asset 屬性所返回的資源。

如果輸出已經(jīng)添加到 AVAssetReader 或讀取已經(jīng)開(kāi)始(“狀態(tài)”已經(jīng)超出 AVAssetReaderStatusUnknown),則此方法拋出異常。

- (void)addOutput:(AVAssetReaderOutput *)output;

  1. 準(zhǔn)備接收器從資產(chǎn)中讀取樣本緩沖區(qū)。

此方法驗(yàn)證軌道輸出、音頻混音和視頻合成的全部設(shè)置集合,并啟動(dòng)從接收器資產(chǎn)讀取。

如果此方法返回“否”,客戶端可以通過(guò)檢查 status 和 error 屬性的值來(lái)確定失敗的原因。

如果讀取已開(kāi)始(“status”已超出 AVAssetReaderStatusUnknown 的階段),則此方法會(huì)拋出異常。

- (BOOL)startReading;

  1. 取消任何后臺(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;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容