寫在前面
喜歡AVFoundation資料的同學(xué)可以關(guān)注我的專題:《AVFoundation》專輯
也可以關(guān)注我的簡(jiǎn)書賬號(hào)
正文
本文所述結(jié)構(gòu)圖如下:

AVAsset緩存
AVAsset緩存需要AVAssetCache類來實(shí)現(xiàn)。
@property (nonatomic, readonly, getter=isPlayableOffline) BOOL playableOffline;
| 屬性名稱 | playableOffline |
|---|---|
| 解釋 | 如果可以在沒有網(wǎng)絡(luò)連接的情況下播放AVAsset的完整再現(xiàn),則返回YES。 |
| 備注 |
YES的答案并不表示任何給定的媒體選擇可用于離線播放。要確定特定媒體選擇是否可脫機(jī)使用,請(qǐng)參閱mediaSelectionOptionsInMediaSelectionGroup:。 |
- (NSArray<AVMediaSelectionOption *> *)mediaSelectionOptionsInMediaSelectionGroup:(AVMediaSelectionGroup *)mediaSelectionGroup;
返回AVMediaSelectionGroup中可用于脫機(jī)操作的AVMediaSelectionOptions數(shù)組,例如playback。
AVAssetDownloadStorageManager
AVAssetDownloadStorageManager管理自動(dòng)清除下載的AVAssets的策略。該策略作為AVAssetDownloadStorageManagementPolicy對(duì)象提供。
需要在
asset上設(shè)置management策略時(shí),需要獲取sharedDownloadStorageManager單例。然后,可以使用setStorageManagementPolicy和下載asset的位置來設(shè)置新的策略。
typedef NSString *AVAssetDownloadedAssetEvictionPriority NS_STRING_ENUM API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, tvos, watchos);
AVAssetDownloadedAssetEvictionPriority字符串常量,由AVAssetDownloadStorageManagementPolicy使用。
AVF_EXPORT AVAssetDownloadedAssetEvictionPriority const AVAssetDownloadedAssetEvictionPriorityImportant API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, tvos, watchos);
AVF_EXPORT AVAssetDownloadedAssetEvictionPriority const AVAssetDownloadedAssetEvictionPriorityDefault API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, tvos, watchos);
| 枚舉名稱 | AVAssetDownloadedAssetEvictionPriority |
|---|---|
| 解釋 | 這些常量表示下載asset的優(yōu)先級(jí)。AVAssetDownloadedAssetEvictionPriorityImportant用于標(biāo)記具有最高優(yōu)先級(jí)的 asset。它們將會(huì)最后被清理。AVAssetDownloadedAssetEvictionPriorityDefault用于標(biāo)記 asset具有默認(rèn)優(yōu)先級(jí)。它們將會(huì)最先被清理。 |
AVAssetDownloadStorageManager
+ (AVAssetDownloadStorageManager *)sharedDownloadStorageManager;
該函數(shù)會(huì)返回一個(gè)單例。
- (void)setStorageManagementPolicy:(AVAssetDownloadStorageManagementPolicy *)storageManagementPolicy forURL:(NSURL *)downloadStorageURL;
| 函數(shù)名稱 | setStorageManagementPolicy: forURL |
|---|---|
| 解釋 | 在downloadStorageURL中設(shè)置具有磁盤備份的asset的策略。 |
| 參數(shù) |
downloadStorageURL:下載 asset的位置。 |
- (nullable AVAssetDownloadStorageManagementPolicy *)storageManagementPolicyForURL:(NSURL *)downloadStorageURL;
| 函數(shù)名 | storageManagementPolicyForURL:downloadStorageURL |
|---|---|
| 解釋 | 返回downloadStorageURL下載的asset的存儲(chǔ)管理策略。如果從未在下載的asset上設(shè)置storageManagementPolicy,則此值可能為nil。 |
| 參數(shù) |
downloadStorageURL:下載 asset的位置。 |
AVAssetDownloadStorageManagementPolicy
@property (nonatomic, readonly, copy) AVAssetDownloadedAssetEvictionPriority priority;
| 屬性名 | priority |
|---|---|
| 解釋 | 表示下載asset的eviction優(yōu)先級(jí)。 |
| 備注 | 具有默認(rèn)優(yōu)先級(jí)的asset將首先在具有較高優(yōu)先級(jí)的asset之前清除。如果未設(shè)置,則使用默認(rèn)優(yōu)先級(jí)。 |
@property (nonatomic, readonly, copy) NSDate *expirationDate;
返回asset的過期時(shí)間。
AVMutableAssetDownloadStorageManagementPolicy
@property (nonatomic, copy) AVAssetDownloadedAssetEvictionPriority priority;
| 屬性名稱 | priority |
|---|---|
| 解釋 | 表示下載asset的priority優(yōu)先級(jí)。 |
| 備注 | 具有默認(rèn)優(yōu)先級(jí)的asset將首先在具有較高優(yōu)先級(jí)的asset之前清除。如果未設(shè)置,則使用默認(rèn)優(yōu)先級(jí)。 |
@property (nonatomic, copy) NSDate *expirationDate;
返回asset的過期時(shí)間。
AVAssetDownloadTask
AVAssetDownloadTask是一個(gè)NSURLSessionTask,接受遠(yuǎn)程AVURLAssets在本地下載。
應(yīng)使用- [AVAssetDownloadURLSession assetDownloadTaskWithURLAsset:assetTitle:assetArtworkData:options:]創(chuàng)建。要利用本地?cái)?shù)據(jù)回放正在進(jìn)行的下載,請(qǐng)重新使用初始化中提供的URLAsset。 AVAssetDownloadTask可以使用指向磁盤上現(xiàn)有asset的destinationURL進(jìn)行實(shí)例化,以完成或擴(kuò)充下載的asset。
AVF_EXPORT NSString *const AVAssetDownloadTaskMinimumRequiredMediaBitrateKey API_AVAILABLE(ios(9.0)) API_UNAVAILABLE(macos, tvos, watchos);
| key名稱 | AVAssetDownloadTaskMinimumRequiredMediaBitrateKey |
|---|---|
| 解釋 | 將選擇大于或等于此值的最低媒體比特率。值應(yīng)為bps中的NSNumber。如果未找到合適的媒體比特率,則將選擇最高媒體比特率。此鍵的值應(yīng)為 NSNumber。 |
| 備注 | 默認(rèn)情況下,將選擇最高媒體比特率進(jìn)行下載。 |
AVF_EXPORT NSString *const AVAssetDownloadTaskMediaSelectionKey API_AVAILABLE(ios(9.0)) API_UNAVAILABLE(macos, tvos, watchos);
| Key名稱 | AVAssetDownloadTaskMediaSelectionKey |
|---|---|
| 解釋 | 此下載的媒體選擇。 這個(gè) Key的值應(yīng)是AVMediaSelection。 |
| 備注 | 默認(rèn)情況下,將自動(dòng)選擇AVAssetDownloadTask的媒體選擇。 |
AVAssetDownloadTask
@property (nonatomic, readonly) AVURLAsset *URLAsset;
初始化時(shí)提供給下載任務(wù)的asset。
@property (nonatomic, readonly) NSURL *destinationURL NS_DEPRECATED_IOS(9_0, 10_0);
初始化時(shí)提供給下載任務(wù)的文件URL。
此
URL可能已附加了asset的相應(yīng)擴(kuò)展名。
@property (nonatomic, readonly, nullable) NSDictionary<NSString *, id> *options;
初始化時(shí)提供給下載任務(wù)的選項(xiàng)。
@property (nonatomic, readonly) NSArray<NSValue *> *loadedTimeRanges;
此屬性提供下載任務(wù)已下載并可播放的媒體數(shù)據(jù)的時(shí)間范圍集合。提供的范圍可能是不連續(xù)的。
返回包含CMTimeRanges的NSValues的NSArray。
@property (readonly, copy) NSURLRequest *originalRequest NS_UNAVAILABLE;
@property (readonly, copy) NSURLRequest *currentRequest NS_UNAVAILABLE;
@property (readonly, copy) NSURLResponse *response NS_UNAVAILABLE;
NSURLRequest和NSURLResponse對(duì)象不適用于AVAssetDownloadTask。
AVAggregateAssetDownloadTask
@property (nonatomic, readonly) AVURLAsset *URLAsset;
初始化時(shí)提供給下載任務(wù)的asset。
@property (readonly, copy) NSURLRequest *originalRequest NS_UNAVAILABLE;
@property (readonly, copy) NSURLRequest *currentRequest NS_UNAVAILABLE;
@property (readonly, copy) NSURLResponse *response NS_UNAVAILABLE;
NSURLRequest和NSURLResponse對(duì)象不適用于AVAggregateAssetDownloadTask。
AVAssetDownloadDelegate代理方法
- (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didFinishDownloadingToURL:(NSURL *)location NS_AVAILABLE_IOS(10_0);
| 函數(shù)名稱 | URLSession:assetDownloadTask:didFinishDownloadingToURL: |
|---|---|
| 解釋 | 已完成下載的下載任務(wù)時(shí)發(fā)送。 |
| 參數(shù) |
session:asset下載任務(wù)所在的會(huì)話。assetDownloadTask:已下載完成的 AVAssetDownloadTask。location:asset已下載到的位置。 |
| 備注 | 與NSURLSessionDownloadDelegate不同,委托在調(diào)用文件后不應(yīng)該從該目錄移動(dòng)該文件。下載的asset必須保留在系統(tǒng)提供的URL中。 URLSession:task:didCompleteWithError:仍將被調(diào)用。 |
- (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didLoadTimeRange:(CMTimeRange)timeRange totalTimeRangesLoaded:(NSArray<NSValue *> *)loadedTimeRanges timeRangeExpectedToLoad:(CMTimeRange)timeRangeExpectedToLoad NS_AVAILABLE_IOS(9_0);
| 函數(shù)名稱 | URLSession:assetDownloadTask:didLoadTimeRange:totalTimeRangesLoaded:timeRangeExpectedToLoad: |
|---|---|
| 解釋 | 用于訂閱AVAssetDownloadTask的進(jìn)度更新的方法。 |
| 參數(shù) |
session:asset下載任務(wù)所在的會(huì)話。assetDownloadTask:正在更新的 AVAssetDownloadTask。timeRange:一個(gè) CMTimeRange,指示自上次調(diào)用此方法以來加載的時(shí)間范圍。loadedTimeRanges:CMTimeRanges的NSValues的NSArray,指示此asset下載任務(wù)加載的所有時(shí)間范圍。timeRangeExpectedToLoadz:CMTimeRange,指示下載完成時(shí)預(yù)期要加載的單個(gè)時(shí)間范圍。 |
- (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didResolveMediaSelection:(AVMediaSelection *)resolvedMediaSelection NS_AVAILABLE_IOS(9_0);
| 函數(shù)名稱 | URLSession:assetDownloadTask:didResolveMediaSelection: |
|---|---|
| 解釋 | 完全解析下載媒體選擇時(shí)調(diào)用的方法,包括任何自動(dòng)的選擇。 |
| 參數(shù) |
session:asset下載任務(wù)所在的會(huì)話。assetDownloadTask正在更新的 AVAssetDownloadTask。resolvedMediaSelection:已下載任務(wù)的已解析媒體選擇。為了在沒有進(jìn)一步網(wǎng)絡(luò) I/O的情況下播放下載內(nèi)容的最佳機(jī)會(huì),請(qǐng)將此選擇應(yīng)用于后續(xù)AVPlayerItem。 |
- (void)URLSession:(NSURLSession *)session aggregateAssetDownloadTask:(AVAggregateAssetDownloadTask *)aggregateAssetDownloadTask willDownloadToURL:(NSURL *)location NS_AVAILABLE_IOS(11_0);
| 函數(shù)名稱 | URLSession:aggregateAssetDownloadTask:willDownloadToURL: |
|---|---|
| 解釋 | 聚合下載任務(wù)確定此asset將下載到的位置時(shí)調(diào)用的方法。 |
| 參數(shù) |
session:聚合 asset下載任務(wù)所在的會(huì)話。aggregateAssetDownloadTask:AVAggregateAssetDownloadTask。location:此任務(wù)將文件 URL下載到的文件URL。 |
| 備注 | 應(yīng)保存此URL以用于AVAsset的未來實(shí)例化。雖然此內(nèi)容已存在AVAsset,但建議重新使用該實(shí)例。 |
- (void)URLSession:(NSURLSession *)session aggregateAssetDownloadTask:(AVAggregateAssetDownloadTask *)aggregateAssetDownloadTask didCompleteForMediaSelection:(AVMediaSelection *)mediaSelection NS_AVAILABLE_IOS(11_0);
| 函數(shù)名稱 | URLSession:aggregateAssetDownloadTask:didCompleteForMediaSelection: |
|---|---|
| 解釋 |
AVAssetDownloadTask子類完成時(shí)調(diào)用的方法。 |
| 參數(shù) |
session:聚合 asset下載任務(wù)所在的會(huì)話。aggregateAssetDownloadTask:AVAggregateAssetDownloadTask。mediaSelection:AVMediaSelection現(xiàn)在完全可供離線使用。 |
- (void)URLSession:(NSURLSession *)session aggregateAssetDownloadTask:(AVAggregateAssetDownloadTask *)aggregateAssetDownloadTask didLoadTimeRange:(CMTimeRange)timeRange totalTimeRangesLoaded:(NSArray<NSValue *> *)loadedTimeRanges timeRangeExpectedToLoad:(CMTimeRange)timeRangeExpectedToLoad forMediaSelection:(AVMediaSelection *)mediaSelection NS_AVAILABLE_IOS(11_0);
| 函數(shù)名稱 | URLSession:aggregateAssetDownloadTask:didLoadTimeRange:totalTimeRangesLoaded:timeRangeExpectedToLoad:forMediaSelection: |
|---|---|
| 解釋 | 用于訂閱AVAggregateAssetDownloadTask的進(jìn)度更新的方法 |
| 參數(shù) |
session:asset下載任務(wù)所在的會(huì)話。aggregateAssetDownloadTask:AVAggregateAssetDownloadTask。timeRange:CMTimeRange,指示為下載的媒體選擇加載的時(shí)間范圍。loadedTimeRanges:CMTimeRanges的NSValues的NSArray,指示為下載的媒體選擇加載的所有時(shí)間范圍。timeRangeExpectedToLoad:CMTimeRange,指示在下載完媒體選擇的下載時(shí)預(yù)期要加載的單個(gè)時(shí)間范圍。 mediaSelection:媒體選擇,其中包含用于離線使用的其他媒體數(shù)據(jù)。 |
AVAssetDownloadURLSession
+ (AVAssetDownloadURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration assetDownloadDelegate:(nullable id <AVAssetDownloadDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)delegateQueue;
| 函數(shù)名稱 | sessionWithConfiguration:assetDownloadDelegate:delegateQueue: |
|---|---|
| 解釋 | 創(chuàng)建并初始化AVAssetDownloadURLSession以與AVAssetDownloadTasks一起使用。 |
| 參數(shù) |
configuration:此 URLSession的配置。必須是后臺(tái)配置。assetDownloadDelegate:委托對(duì)象,用于處理 asset下載進(jìn)度更新和其他與會(huì)話相關(guān)的事件。delegateQueue:接收委托回調(diào)的隊(duì)列。如果為 nil,則將提供串行隊(duì)列。 |
- (nullable AVAssetDownloadTask *)assetDownloadTaskWithURLAsset:(AVURLAsset *)URLAsset destinationURL:(NSURL *)destinationURL options:(nullable NSDictionary<NSString *, id> *)options NS_DEPRECATED_IOS(9_0, 10_0);
| 函數(shù)名稱 | assetDownloadTaskWithURLAsset:destinationURL:options: |
|---|---|
| 解釋 | 創(chuàng)建并初始化要與此AVAssetDownloadURLSession一起使用的AVAssetDownloadTask。 |
| 參數(shù) |
URLAsset:AVURLAsset可在本地下載。destinationURL:要將 asset下載到的本地URL。這必須是文件URL。options:請(qǐng)參閱上面的 AVAssetDownloadTask * Key。配置下載任務(wù)的非默認(rèn)行為。下載HLS asset的非默認(rèn)媒體選擇時(shí)需要使用此參數(shù)。 |
| 備注 | 如果URLSession已失效,則此方法可能返回nil。 |
- (nullable AVAssetDownloadTask *)assetDownloadTaskWithURLAsset:(AVURLAsset *)URLAsset assetTitle:(NSString *)title assetArtworkData:(nullable NSData *)artworkData options:(nullable NSDictionary<NSString *, id> *)options NS_AVAILABLE_IOS(10_0);
| 函數(shù)名稱 | assetDownloadTaskWithURLAsset:assetTitle:assetArtworkData:options: |
|---|---|
| 解釋 | 創(chuàng)建并初始化要與此AVAssetDownloadURLSession一起使用的AVAssetDownloadTask。 |
| 參數(shù) |
URLAsset:AVURLAsset可在本地下載。assetTitle:此 asset的human readable title,應(yīng)盡可能適合用戶的首選語言。將顯示在設(shè)置應(yīng)用的使用情況窗格中。assetArtworkData:NSData表示此asset的圖稿數(shù)據(jù)。是可選的。將顯示在設(shè)置應(yīng)用的使用情況窗格中。必須使用+ [UIImage imageWithData:]。options:請(qǐng)參閱上面的 AVAssetDownloadTask * Key。配置下載任務(wù)的非默認(rèn)行為。下載HLS``asset的非默認(rèn)媒體選擇時(shí)需要使用此參數(shù)。 |
| 備注 | 如果URLSession已失效,則此方法可能返回ni。 |
- (nullable AVAggregateAssetDownloadTask *)aggregateAssetDownloadTaskWithURLAsset:(AVURLAsset *)URLAsset mediaSelections:(NSArray <AVMediaSelection *> *)mediaSelections assetTitle:(NSString *)title assetArtworkData:(nullable NSData *)artworkData options:(nullable NSDictionary<NSString *, id> *)options NS_AVAILABLE_IOS(11_0);
| 函數(shù)名稱 | aggregateAssetDownloadTaskWithURLAsset:mediaSelections:assetTitle:assetArtworkData:options: |
|---|---|
| 解釋 | 創(chuàng)建并初始化AVAggregateAssetDownloadTask以在AVURLAsset上下載多個(gè)AVMediaSelections。 |
| 參數(shù) |
URLAsset:AVURLAsset可在本地下載。mediaSelections:AVMediaSelections列表。每個(gè)AVMediaSelection將對(duì)應(yīng)一個(gè)childAssetDownloadTask。使用- [AVAsset allMediaSelections]下載此AVAsset上的所有AVMediaSelections。assetTitle:此 asset的人類可讀標(biāo)題,應(yīng)盡可能適合用戶的首選語言。將顯示在設(shè)置應(yīng)用的使用情況窗格中。assetArtworkData:此 asset的圖稿數(shù)據(jù)。是可選的。將顯示在設(shè)置應(yīng)用的使用情況窗格中。options:請(qǐng)參閱上面的 AVAssetDownloadTask * Key。配置下載任務(wù)的非默認(rèn)行為。 |
| 備注 | 如果URLSession已失效,則此方法可能返回nil。 AVAssetDownloadTaskMediaSelectionKey的值將被忽略。 |
只能使用
AVAssetDownloadURLSession創(chuàng)建AVAssetDownloadTasks
+ (NSURLSession *)sharedSession NS_UNAVAILABLE;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration NS_UNAVAILABLE;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue NS_UNAVAILABLE;
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request NS_UNAVAILABLE;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url NS_UNAVAILABLE;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL NS_UNAVAILABLE;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData NS_UNAVAILABLE;
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request NS_UNAVAILABLE;
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request NS_UNAVAILABLE;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url NS_UNAVAILABLE;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData NS_UNAVAILABLE;
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler NS_UNAVAILABLE;
| 上一章 | 目錄 | 下一章 |
|---|