AVAsset 用于建模同步視聽媒體:如視頻和聲音 的抽象類。
AVAsset定義了組成資源的軌道的集合屬性。使用指向媒體資源 (本地或遠(yuǎn)程)URL初始化AVAsset,如下面的示例所示:
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:@""]];
AVAsset是一個抽象類,因此創(chuàng)建示例中所示的AVAsset實際上是在創(chuàng)建一個名為AVURLAsset的具體子類的實例。在許多情況下,這是創(chuàng)建AVAsset的合適方法,但是當(dāng)需要對其初始化進(jìn)行更細(xì)粒度的控制時,也可以直接實例化AVURLAsset。AVURLAsset的初始化程序接受一個選項字典,使用該字典可以根據(jù)特定用例定制資源的初始化。例如,如果正在為HLS流創(chuàng)建AVAsset,則可能希望在用戶連接到蜂窩網(wǎng)絡(luò)時阻止其檢索其媒體。
可以執(zhí)行此操作,如以下示例所示:
NSURL *url = [NSURL URLWithString:@""];
NSDictionary *options = @{AVURLAssetAllowsCellularAccessKey:@NO};
AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:url options:options];
還可以使用其他具體子類來實例化AVAsset,這些子類以有用的方式擴(kuò)展視聽媒體的基本模型,就像AVComposition對時間編輯一樣。
由于同步視聽媒體的特性,在成功初始化AVAsset之后,其鍵的部分或全部值可能無法立即可用。任何鍵的值都可以在任何時候被請求,并且AVAsset總是同步返回它的值,盡管它可能必須阻止調(diào)用線程這樣做。為了避免阻塞,可以注冊對特定鍵的監(jiān)聽,并在它們的值可用時得到通知。有關(guān)詳細(xì)信息,請參閱AVAsynchronousKeyValueLoading。
要播放AVAsset的實例,用它初始化AVPlayerItem的實例,使用播放器項設(shè)置其演示狀態(tài)(例如是否應(yīng)該播放AVAsset的限定timeRange),并將播放器項提供給AVPlayer對象根據(jù)項目是單獨播放還是與其他項目集合播放。
可以將AVAsset對象插入到AVMutableComposition對象中,以組合來自一個或多個源資源的視聽構(gòu)造。
子類注釋:目前,AVAsset的子類無法處理框架不支持的流協(xié)議或文件格式。
1、創(chuàng)建AVAsset
返回用于檢查媒體資源的AVAsset。
+ (instancetype)assetWithURL:(NSURL *)URL;
2、加載數(shù)據(jù)中
取消加載所有觀察者的值。
- (void)cancelLoading;
此方法顯式取消AVAsset的-loadValuesAsynchronouslyForKeys:completionHandler:方法的任何掛起調(diào)用。只有當(dāng)完全使用AVAsset并且希望終止任何未完成的請求時,才應(yīng)使用此方法。如果任何加載請求仍處于掛起狀態(tài),AVAsset實例的重分配將隱式調(diào)用此方法。
3、檢查AVAsset
| 只讀屬性 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
duration |
CMTime |
AVAsset的持續(xù)時間;可以為用url初始化的AVAsset在初始化時設(shè)置與時間相關(guān)的屬性所需的精確度(參閱AVURLAsset中的AVURLAssetPreferPreciseDurationAndTimingKey ) |
providesPrecise DurationAndTiming |
BOOL |
指示AVAsset是否提供精確的時間的布爾值;如果為YES,則返回AVAsset的精確持續(xù)時間duration;如果為NO,則返回估計值。 |
creationDate |
AVMetadataItem |
指示AVAsset的創(chuàng)建日期;該值可能為 nil。如果AVAsset以可轉(zhuǎn)換為NSDate對象的形式存儲創(chuàng)建日期,則元數(shù)據(jù)項的dateValue屬性將提供NSDate的實例。否則,創(chuàng)建日期僅作為字符串值使用AVMetadataItem類的-stringValue方法。 |
naturalSize |
CGSize |
AVAsset可視部分的編碼大?。槐粡U棄。 |
preferredRate |
float |
AVAsset播放的自然速度;此值通常(但不總是)為1.0。 |
preferredTransform |
CGAffineTransform |
應(yīng)用于AVAsset的可視內(nèi)容以進(jìn)行呈現(xiàn)或處理的首選轉(zhuǎn)換。該值通常(但不總是)轉(zhuǎn)換。 |
preferredVolume |
float |
播放AVAsset可聽媒體的首選音量;此值通常(但不總是)為1.0。 |
preferredDisplayCriteria |
AVDisplayCriteria |
顯示標(biāo)準(zhǔn),用于定義AVAsset的最佳電視顯示模式。 |
AVDisplayCriteria 包含定義媒體AVAsset的顯示條件的屬性的對象。不可創(chuàng)建此類的實例,而是使用AVAsset中的preferredDisplayCriteria屬性檢索媒體資產(chǎn)的顯示條件,例如其理想幀速率;使用AVKit時,無需檢索資產(chǎn)的顯示標(biāo)準(zhǔn)。 AVKit使用其首選顯示標(biāo)準(zhǔn)自動顯示資產(chǎn)。
4、確定可用性
當(dāng)可以執(zhí)行指定的操作時,可用性屬性的值為YES,即使僅在特定條件下為YES。只有在沒有條件執(zhí)行相關(guān)操作時,這些屬性才返回NO。
只讀BOOL屬性 |
描述 |
|---|---|
playable |
指示AVAsset或其URL是否可用于初始化AVPlayerItem實例。 |
exportable |
指示是否可以使用AVAssetExportSession導(dǎo)出AVAsset。 |
readable |
指示是否可以使用AVAssetReader提取AVAsset的媒體數(shù)據(jù)。 |
composable |
指示AVAsset是否可以在AVCompositionTrack對象的一個段中使用。 |
hasProtectedContent |
指示AVAsset是否具有受保護(hù)的內(nèi)容;未經(jīng)成功授權(quán),包含受保護(hù)內(nèi)容的資產(chǎn)可能無法播放,即使可播放屬性的值為YES。 |
compatibleWithAirPlayVideo |
指示AVAsset是否可以使用AirPlay Video在外部設(shè)備:如Apple TV 上播放使用此AVAsset初始化的AVPlayerItem。 |
compatibleWithSavedPhotosAlbum |
指示是否可以將AVAsset寫入“已保存的照片”相冊。 |
5、訪問軌道
只讀屬性NSArra
|
描述 |
|---|---|
tracks |
AVAsset所包含的所有軌道AVAssetTrack的集合。 |
trackGroups |
AVAsset中包含所有軌道組的數(shù)組;每個AVAssetTrackGroup實例代表AVAsset中不同的軌道分組。如果未定義任何軌道組,則此屬性將包含空數(shù)組。 |
5.1、指定trackID
如果沒有指定trackID,則返回nil;當(dāng)AVAssetTrack屬性中的數(shù)據(jù)已加載時,可以不阻塞地調(diào)用此方法。
- (AVAssetTrack *)trackWithTrackID:(CMPersistentTrackID)trackID;
5.2、指定媒體類型mediaType
提供指定媒體的AVAsset的AVAssetTrack對象數(shù)組。
- (NSArray<AVAssetTrack *> *)tracksWithMediaType:(AVMediaType)mediaType;
5.3、指定媒體特征mediaCharacteristic
返回AVAsset的AVAssetTrack數(shù)組,用于顯示具有指定特征的媒體;如果沒有具有指定特征的軌道可用,則為空數(shù)組。
- (NSArray<AVAssetTrack *> *)tracksWithMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;
- 參數(shù)
mediaCharacteristic:接收器過濾其資產(chǎn)跟蹤的媒體特征;有關(guān)有效值,例如AVMediaCharacteristicAudible和AVMediaCharacteristicVisual,請參閱介質(zhì)特征。
5.4、未使用的TrackID
返回AVAsset中任何AVAssetTrack未使用的TrackID
- (CMPersistentTrackID)unusedTrackID;
5.5、一組相關(guān)軌道
AVAssetTrackGroup 繼承自NSObject,是AVAsset中的一組相關(guān)軌道。
該實例描述了一組相關(guān)的備用軌道,一次只能播放其中一個。備用軌道組通常包含相同內(nèi)容的變體,例如多個翻譯中的字幕。
客戶端可以通過加載和獲取AVAsset的trackGroups屬性的值來檢查AVAsset實例中包含的軌道組。
//組中軌道的ID。
@property(nonatomic, readonly) NSArray<NSNumber *> *trackIDs;
6、訪問元數(shù)據(jù)
可以使用AVMetadataItem提供的類方法將以下數(shù)組過濾到感興趣的特定項目,例如-metadataItemsFromArray:filteredByIdentifier:或-metadataItemsFromArray:withLocale:。
特別注意事項:當(dāng)已加載availableMetadataFormats屬性中的數(shù)據(jù)時,此方法可以無阻塞地調(diào)用。
| 只讀屬性 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
lyrics |
NSString |
AVAsset的詞,使用適合當(dāng)前語言環(huán)境的語言。 |
metadata |
NSArray |
所有元數(shù)據(jù)標(biāo)識符的元數(shù)據(jù)項數(shù)組,其中有一個值可用.可以使用-metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:方法根據(jù)語言過濾AVMetadataItem實例數(shù)組。 |
commonMetadata |
NSArray |
每個公共元數(shù)據(jù)鍵的元數(shù)據(jù)項數(shù)組,其中有一個值可用。每個元數(shù)據(jù)AVMetadataItem鍵對應(yīng)一個來自公共鍵空間的元數(shù)據(jù)鍵,該AVAsset對公共鍵空間具有可用值。 |
availableMetadataFormats |
NSArray |
每個字符串表示AVAsset可用的元數(shù)據(jù)格式AVMetadataFormat。元數(shù)據(jù)格式可以包括ID3,iTunes元數(shù)據(jù)等。對于AVMetadataItem支持的可用元數(shù)據(jù)格式,請參閱AVFoundation元數(shù)據(jù)鍵常量中的元數(shù)據(jù)格式常量。 |
6.1、指定AVMetadataFormat
返回AVMetadataItem對象的數(shù)組:對應(yīng)于指定格式容器中的每個元數(shù)據(jù)項。
- (NSArray<AVMetadataItem *> *)metadataForFormat:(AVMetadataFormat)format;
- 參數(shù)
format:想要項目的元數(shù)據(jù)格式。 - 返回值:一個
AVMetadataItem對象數(shù)組,一個用于指定格式的容器中的每個元數(shù)據(jù)項,如果沒有指定格式的元數(shù)據(jù),則為空數(shù)組。
7、使用章節(jié)元數(shù)據(jù)
//AVAsset中的章節(jié)元數(shù)據(jù)可用的區(qū)域
@property(readonly) NSArray<NSLocale *> *availableChapterLocales;
7.1、返回具有給定標(biāo)題區(qū)域設(shè)置并包含指定鍵的章節(jié)數(shù)組
返回具有給定標(biāo)題區(qū)域設(shè)置并包含指定鍵的章節(jié)數(shù)組:
- (NSArray<AVTimedMetadataGroup *> *)chapterMetadataGroupsWithTitleLocale:(NSLocale *)locale
containingItemsWithCommonKeys:(NSArray<AVMetadataKey> *)commonKeys;
- 參數(shù)
locale:攜帶要返回的章節(jié)標(biāo)題的元數(shù)據(jù)項的區(qū)域設(shè)置。 - 參數(shù)
commonKeys:AVMetadataItem的公共鍵數(shù)組,包含在返回的數(shù)組中。AVMetadataCommonKeyArtwork是唯一受支持的鍵。
返回數(shù)組中的每個對象都包含一個表示章節(jié)標(biāo)題的AVMetadataItem對象,AVTimedMetadataGroup對象的時間范圍屬性等于章節(jié)標(biāo)題項的時間范圍。
如果元數(shù)據(jù)項和元數(shù)據(jù)組的時間范圍(時間戳和持續(xù)時間)重疊,則將具有指定公共鍵的AVMetadataItem添加到現(xiàn)有AVTimedMetadataGroup對象。
不帶章節(jié)標(biāo)題的項目的區(qū)域設(shè)置不需要與指定的區(qū)域設(shè)置參數(shù)匹配。可以使用-metadataItemsFromArray:withLocale:基于區(qū)域設(shè)置過濾返回的項目。
7.2、返回區(qū)域設(shè)置與首選語言列表最匹配的章節(jié)數(shù)組。
返回區(qū)域設(shè)置與首選語言列表最匹配的章節(jié)數(shù)組。
- (NSArray<AVTimedMetadataGroup *> *)chapterMetadataGroupsBestMatchingPreferredLanguages:(NSArray<NSString *> *)preferredLanguages;
- 參數(shù)
preferredLanguages:每個NSString對象都包含一個規(guī)范化的IETF BCP 47語言標(biāo)識符。數(shù)組中標(biāo)識符的順序反映了首選語言順序,最優(yōu)選的語言是數(shù)組中的第一個。通常,通過從NSLocale的preferredLanguages類方法檢索此數(shù)組來傳遞用戶的首選語言。
返回數(shù)組中的每個對象都包含一個表示章節(jié)標(biāo)題的AVMetadataItem對象。AVTimedMetadataGroup對象的時間范圍屬性等于章節(jié)標(biāo)題項的時間范圍。
所有可用的章節(jié)元數(shù)據(jù)都包含在元數(shù)據(jù)組中,包括具有公共鍵AVMetadataCommonKeyArtwork的項目(如果存在此類項目)。 如果元數(shù)據(jù)項的時間范圍(時間戳和持續(xù)時間)與元數(shù)據(jù)組的時間范圍(時間戳和持續(xù)時間)重疊,則不攜帶章節(jié)標(biāo)題的項目將添加到現(xiàn)有的AVTimedMetadataGroup對象。這些項目的區(qū)域設(shè)置不需要與章節(jié)標(biāo)題的區(qū)域設(shè)置相匹配。
可以使用-metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:方法進(jìn)一步過濾每個組中的元數(shù)據(jù)項。還可以使用metadataItemsFromArray:withLocale:方法根據(jù)區(qū)域設(shè)置過濾返回的項目。
特別注意事項:當(dāng)availableChapterLocales屬性中的數(shù)據(jù)已加載時,變?yōu)榭烧{(diào)用而不會阻塞。
7.3、添加章節(jié)標(biāo)記
添加章節(jié)標(biāo)記,使用戶能夠快速瀏覽您的內(nèi)容。
章節(jié)標(biāo)記使用戶能夠快速瀏覽您的內(nèi)容。在tvOS和macOS中的AVPlayerViewController中,如果在當(dāng)前播放的資產(chǎn)中找到標(biāo)記,則會自動呈現(xiàn)一個chapter-selection接口。還可以在需要創(chuàng)建自己的自定義chapter選擇接口時直接檢索這些數(shù)據(jù)。
7.3.1、檢索定時元數(shù)據(jù)
章節(jié)標(biāo)記是一種定時元數(shù)據(jù),僅適用于AVAsset時間軸內(nèi)的時間范圍??梢允褂?code>-chapterMetadataGroupsBestMatchingPreferredLanguages:或-chapterMetadataGroupsWithTitleLocale:containingItemsWithCommonKeys:方法來檢索AVAsset的章節(jié)元數(shù)據(jù)。在異步加載AVAsset的availableChapterLocales鍵值之后,這些方法無需阻塞即可調(diào)用。
AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:@""]];
NSString *chapterLocalesKey = @"availableChapterLocales";
[asset loadValuesAsynchronouslyForKeys:@[chapterLocalesKey] completionHandler:^{
NSError *error = nil;
AVKeyValueStatus status = [asset statusOfValueForKey:chapterLocalesKey error:&error];
if (status == AVKeyValueStatusLoaded) {
NSArray<AVTimedMetadataGroup *> *metadataGroups = [asset chapterMetadataGroupsBestMatchingPreferredLanguages:NSLocale.preferredLanguages];
//過程元數(shù)據(jù)
}else{
// 處理其他狀態(tài)
}
}];
7.3.2、將定時元數(shù)據(jù)轉(zhuǎn)換為章節(jié)數(shù)據(jù)
這些方法返回的值是AVTimedMetadataGroup對象數(shù)組,每個對象代表一個單獨的章節(jié)標(biāo)記。AVTimedMetadataGroup對象由CMTimeRange組成,它定義了它的元數(shù)據(jù)應(yīng)用的時間范圍,AVMetadataItem對象數(shù)組表示章節(jié)的標(biāo)題,以及它的縮略圖。下面的示例展示了如何將AVTimedMetadataGroup數(shù)據(jù)轉(zhuǎn)換為一個定制模型對象數(shù)組,稱為Chapter,將在應(yīng)用程序的視圖層中顯示。
- (NSMutableArray<NSDictionary *> *)convertTimedMetadataGroupsToChapters:(NSArray<AVTimedMetadataGroup *> *)metadataGroups
{
NSMutableArray *chapter = [NSMutableArray arrayWithCapacity:metadataGroups.count];
[metadataGroups enumerateObjectsUsingBlock:^(AVTimedMetadataGroup * _Nonnull group, NSUInteger idx, BOOL * _Nonnull stop) {
//檢索AVMetadataCommonIdentifierTitle元數(shù)據(jù)項
NSArray<AVMetadataItem *> *titleItems = [AVMetadataItem metadataItemsFromArray:group.items filteredByIdentifier:AVMetadataCommonIdentifierTitle];
//檢索AVMetadataCommonIdentifierTitle元數(shù)據(jù)項
NSArray<AVMetadataItem *> *artworkItems = [AVMetadataItem metadataItemsFromArray:group.items filteredByIdentifier:AVMetadataCommonIdentifierArtwork];
NSString *title = titleItems.firstObject.stringValue ? : @"Default Title";
UIImage *image = artworkItems.firstObject.dataValue ? [UIImage imageWithData:artworkItems.firstObject.dataValue] : [UIImage imageNamed:@"placeholder"];
NSDictionary *dict = @{@"time":[NSValue valueWithCMTime:group.timeRange.start],
@"title":title,@"image":image};
[chapter addObject:dict];
}];
return chapter;
}
通過轉(zhuǎn)換相關(guān)數(shù)據(jù),可以構(gòu)建一個chapter-selection接口,并使用chapter對象的時間值,使用播放器的-seekToTime:方法查找當(dāng)前的表示。
8、查找媒體選擇
| 只讀屬性 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
preferredMediaSelection |
AVMediaSelection |
此AVAsset的媒體選擇組的默認(rèn)媒體選擇。 |
availableMedia CharacteristicsWith MediaSelectionOptions |
NSArray |
媒體選擇選項可用的一系列媒體特征AVMediaCharacteristic。 |
allMediaSelections |
NSArray |
返回包含一個或多個具有指定媒體特征的選項的AVMediaSelectionGroup對象。
- (AVMediaSelectionGroup *)mediaSelectionGroupForMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;
參數(shù)
mediaCharacteristic:希望獲得可用媒體選擇選項的媒體特征。目前僅支持AVMediaCharacteristicAudible,AVMediaCharacteristicVisual和AVMediaCharacteristicLegible。通過
AVMediaCharacteristicAudible獲取各種語言和各種用途的音頻媒體的可用選項組,例如描述性音頻。傳遞
AVMediaCharacteristicLegible以獲取各種語言和各種用途的字幕的可用選項組。傳遞
AVMediaCharacteristicVisual以獲取視頻媒體的可用選項組。返回值:一個
AVMediaSelectionGroup對象,包含一個或多個具有mediaCharacteristic指定的媒體特征的選項,如果找不到,則為nil。
當(dāng)加載了availableMediaCharacteristicsWithMediaSelectionOptions鍵時,您可以調(diào)用此方法而無需阻塞。
可以根據(jù)可播放性,區(qū)域設(shè)置過濾返回的媒體選擇組中的選項,并且可以使用AVMediaSelectionGroup類中定義的過濾方法來完成其他媒體特征。
9、管理引用訪問限制
接收方使用的引用限制。
@property(nonatomic, readonly) AVAssetReferenceRestrictions referenceRestrictions;
對于AVURLAsset,此屬性反映了AVURLAssetReferenceRestrictionsKey傳入的值(如果有)。
此屬性的默認(rèn)值為AVAssetReferenceRestrictionForbidNone。 有關(guān)參考限制的完整討論,請參見AVURLAssetReferenceRestrictionsKey。
10、處理片段電影
| 只讀屬性 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
canContainFragments |
BOOL |
指示AVAsset是否能夠通過片段進(jìn)行擴(kuò)展;對于QuickTime電影文件和MPEG-4文件,如果'moov'框中存在'mvex'框,則該值為YES。對于那些類型,'mvex'框表示可能存在后來的'moof'框。 |
containsFragments |
BOOL |
指示AVAsset是否由至少一個電影片段擴(kuò)展;對于QuickTime影片文件和MPEG-4文件,如果canContainFragments為YES且“moov”框后面至少有一個“moof”框,則此屬性的值為YES。 |
overallDurationHint |
CMTime |
該值指示碎片的總持續(xù)時間,這些碎片要么現(xiàn)在存在,要么將來可能被追加,以延長AVAsset的持續(xù)時間。對于QuickTime影片文件和MPEG-4文件,此屬性的值是從mvex框的mehd框中獲取的(如果存在)。如果沒有可用的總片段持續(xù)時間提示,則此屬性的值為kCMTimeInvalid。 |
11、指定媒體特征
AVMediaCharacteristic 使用typedef修飾的字符串,用于指定媒體類型特征的常量。
.mov文件和.m4v文件中的每個軌道都可以選擇性地攜帶一個或多個標(biāo)記的媒體特征,每個特征都聲明了軌道媒體的用途,特征或其他一些區(qū)別特性。例如,包含原始節(jié)目內(nèi)容和附加的視覺動作敘述描述的音頻的音軌可能被標(biāo)記為媒體特征“public.accessibility.describe -video”,以區(qū)別于存儲在同一文件中不包含額外敘事的其他音軌。
.mov和.m4v文件中的每個標(biāo)記媒體特征 作為'tagc'類型的用戶數(shù)據(jù)項存儲在跟蹤用戶數(shù)據(jù)中,該用戶數(shù)據(jù)項由標(biāo)準(zhǔn)原子頭后跟一個數(shù)組 US-ASCII字符,包含標(biāo)記的值。字符數(shù)組不是C字符串。用戶數(shù)據(jù)項原子大小是標(biāo)準(zhǔn)原子標(biāo)題大小和US-ASCII字符數(shù)組大小的總和。
可以檢查標(biāo)記的媒體特征的軌道如下:
NSArray *trackUserDataItems = [myAVAssetTrack metadataForFormat:AVMetadataFormatQuickTimeUserData];
NSArray *trackTaggedMediaCharacteristics = [AVMetadataItem metadataItemsFromArray:trackUserDataItems
withKey:AVMetadataQuickTimeUserDataKeyTaggedCharacteristic
keySpace:AVMetadataKeySpaceQuickTimeUserData];
for (AVMetadataItem *metadataItem in trackTaggedMediaCharacteristics) {
NSString *thisTrackMediaCharacteristic = [metadataItem stringValue];
}
可以使用-hasMediaCharacteristic:來確定軌道是否具有特定的媒體特征,是否從其媒體類型或格式描述(例如AVMediaCharacteristicAudible或AVMediaCharacteristicContainsOnlyForcedSubtitles)推斷出特征,或者需要顯式標(biāo)記(例如AVMediaCharacteristicTranscribesSpokenDialogForAccessibility或AVMediaCharacteristicEasyToRead)。請注意,顯式標(biāo)記不能用于覆蓋軌道媒體類型或格式描述的推斷; 例如,以下代碼清單對任何音頻軌道都返回NO,即使該軌道已經(jīng)被視覺特征進(jìn)行了反向標(biāo)記。
[anAVAssetTrack hasMediaCharacteristic:AVMediaCharacteristicVisual]
如果AVAsset編寫者的輸出文件類型為mov或m4v,則可以將標(biāo)記的媒體特征寫入與AVAssetWriterInput對象關(guān)聯(lián)的輸出軌道的QuickTime用戶數(shù)據(jù),如下所示:
AVMutableMetadataItem *myTaggedMediaCharacteristic = [[AVMutableMetadataItem alloc] init];
[myTaggedMediaCharacteristic setKey:AVMetadataQuickTimeUserDataKeyTaggedCharacteristic];
[myTaggedMediaCharacteristic setKeySpace:AVMetadataKeySpaceQuickTimeUserData];
[myTaggedMediaCharacteristic setValue:aMeaningfulCharacteristicAsNSString];
[myMutableArrayOfMetadata addObject:myTaggedMediaCharacteristic];
[myAssetWriterInput setMetadata:myMutableArrayOfMetadata];
11.1、AVMediaCharacteristic常量
//表示媒體是看得見的
AVMediaCharacteristicVisual
//表示媒體是聽得見的
AVMediaCharacteristicAudible
//表示媒體是清晰的。
AVMediaCharacteristicLegible
//表示媒體是基于幀的
AVMediaCharacteristicFrameBased
/* 表示設(shè)置包含由內(nèi)容作者標(biāo)記為AVAsset表示的內(nèi)在內(nèi)容;
* 該特征的值是“public.main-program-content”;
* 例如:顯示演示文稿的主程序音頻的選項(無論區(qū)域設(shè)置如何)通常都具有此特征。
* 任何沒有AVMediaCharacteristicIsAuxiliaryContent特征的選項都被認(rèn)為具有該特征。
*/
AVMediaCharacteristicIsMainProgramContent
/* 表示設(shè)置包括由內(nèi)容作者標(biāo)記為AVAsset表示的輔助內(nèi)容;
* 該特征值是“public.auxiliary-content”;
* 例如:顯示包含演示文稿注釋的音頻媒體的選項通常具有此特征。
*/
AVMediaCharacteristicIsAuxiliaryContent
/* 表示選項僅顯示強制字幕;
* 該特征值是“public.subtitles.forced-only”。
* 只有強制字幕的媒體選項通常是在以下情況下選擇的:
* (1)、用戶沒有選擇具有可訪問性特征或輔助用途的易讀選項;
* (2)、其語言環(huán)境與所選的可聽媒體選擇選項的語言環(huán)境匹配。
* 從呈現(xiàn)字幕媒體的相關(guān)軌道的格式描述推斷出可讀媒體選項的這種特性的存在。
*/
AVMediaCharacteristicContainsOnlyForcedSubtitles
/* 表示該選項包含其指定語言環(huán)境語言的易讀內(nèi)容,用于轉(zhuǎn)錄對話框;
* 該特征值是“public.accessibility.transcribes-speaking-dialog”;
* 可讀媒體選項可以包括口語對話的轉(zhuǎn)錄和音樂和聲音效果的描述;
* 對于QuickTime影片和.m4v文件,僅當(dāng)媒體選項明確標(biāo)記有該特征時,才認(rèn)為該媒體選項具有AVMediaCharacteristicTranscribesSpokenDialogForAccessibility的特征。
*/
AVMediaCharacteristicTranscribesSpokenDialogForAccessibility
/* 表示該選項包含其指定語言環(huán)境語言的清晰內(nèi)容,用于描述節(jié)目音頻中出現(xiàn)的音樂和聲音效果;
* 該特征值是“public.accessibility.describes-music-and-sound”;
* 可讀媒體選項可以包括口語對話的轉(zhuǎn)錄和音樂和聲音效果的描述;
* 對于QuickTime影片和.m4v文件,僅當(dāng)媒體選項明確標(biāo)記有該特征時,才認(rèn)為該媒體選項具有AVMediaCharacteristicDescribesMusicAndSoundForAccessibility特征。
*/
AVMediaCharacteristicDescribesMusicAndSoundForAccessibility
/* 表示該選項以其指定語言環(huán)境的語言提供易讀內(nèi)容,并且已編輯內(nèi)容以便于閱讀;
* 該特征值是“public.easy-to-read”。
* 帶有“易讀”字幕的隱藏式字幕軌道(根據(jù)CEA-608規(guī)范)應(yīng)標(biāo)有此特性。
* 在適當(dāng)?shù)那闆r下,字幕軌道也可以用這個特征標(biāo)記。
* 對于QuickTime影片和.m4v文件,僅當(dāng)媒體選項明確標(biāo)記有該特征時,才認(rèn)為該媒體選項具有AVMediaCharacteristicEasyToRead特征。
*/
AVMediaCharacteristicEasyToRead
/* 表示該選項包含描述演示文稿可視部分的可聽內(nèi)容;
* 該特征值是“public.accessibility.describes-video”;
* 可讀媒體選項可以包括口語對話的轉(zhuǎn)錄和音樂和聲音效果的描述。
* 對于QuickTime影片和.m4v文件,僅當(dāng)媒體選項明確標(biāo)記有該特征時,才認(rèn)為該媒體選項具有AVMediaCharacteristicEasyToRead特征。
*/
AVMediaCharacteristicDescribesVideoForAccessibility
AVMediaCharacteristicLanguageTranslation
AVMediaCharacteristicDubbedTranslation
AVMediaCharacteristicVoiceOverTranslation
AVMediaCharacteristicUsesWideGamutColorSpace
二、AVURLAsset
AVURLAsset AVAsset的具體子類,用于從本地或遠(yuǎn)程URL初始化AVAsset。
1、創(chuàng)建AVAsset
返回對指定URL找到的媒體資源構(gòu)建的AVAsset。
- (instancetype)initWithURL:(NSURL *)URL
options:(NSDictionary<NSString *,id> *)options;
+ (instancetype)URLAssetWithURL:(NSURL *)URL
options:(NSDictionary<NSString *,id> *)options;
| 初始化選項可選鍵 | 描述 |
|---|---|
AVURLAssetPreferPreciseDurationAndTimingKey |
指示AVAsset是否應(yīng)準(zhǔn)備好指示精確的持續(xù)時間并按時間提供精確的隨機(jī)訪問,默認(rèn)值為NO。YES表示在需要精確計時的情況下,可以接受更長的加載時間;然而,這種精確度可能需要在利用其任何部分的操作之前額外解析資源,這取決于其容器格式的細(xì)節(jié);許多容器格式提供了足夠的摘要信息以便精確計時,并且不需要額外的解析來準(zhǔn)備它; QuickTime電影文件和MPEG-4文件是此類格式的示例。 其他格式不提供足夠的摘要信息,只有在對文件內(nèi)容進(jìn)行初步檢查后才能對它們進(jìn)行精確的隨機(jī)訪問。如果只打算播放資產(chǎn),則默認(rèn)值為NO就足夠了,因為當(dāng)全精度不可用時,AVPlayer支持按時間進(jìn)行近似隨機(jī)訪問。如果打算將AVAsset插入AVMutableComposition對象,通常需要精確的隨機(jī)訪問,建議使用YES值。 |
AVURLAssetReferenceRestrictionsKey |
枚舉值,指示AVAsset在解析對外部媒體數(shù)據(jù)的引用時使用的限制。某些AVAsset可以包含對存儲在資產(chǎn)容器文件外部的媒體數(shù)據(jù)的引用,例如在另一個文件中。可以使用此鍵指定遇到這些引用時要使用的策略。如果AVAsset包含一個或多個引用限制禁止的類型的引用,則AVAsset屬性的加載將失敗。此外,此類AVAsset不能與其他AVFoundation對象一起使用,例如AVPlayerItem或AVAssetExportSession。 |
AVURLAssetHTTPCookiesKey |
AVURLAsset可以通過HTTP請求發(fā)送的HTTP cookie。標(biāo)準(zhǔn)跨站點策略仍然適用:cookie僅發(fā)送到它們適用的域。默認(rèn)情況下,AVURLAsset只能訪問應(yīng)用于資源 URL的客戶端默認(rèn)cookie存儲中的cookie。可以使用此初始化選項來補充資源可用的cookie。HTTP cookie不適用于非HTTPS URL。在HLS中,許多HTTP請求(例如,媒體,密鑰,變體索引)可以被發(fā)布到不同的路徑或主機(jī)。在這兩種情況下,HTTP請求都將丟失任何不適用于AVURLAsset URL的cookie。此初始化選項允許AVURLAsset為這些HTTPS請求使用其他HTTP cookie。 |
AVURLAssetAllowsCellularAccessKey |
指示連接到蜂窩網(wǎng)絡(luò)時是否允許代表AVAsset的網(wǎng)絡(luò)請求,默認(rèn)為YES。如果要限制默認(rèn)行為,可以在初始化時將此值設(shè)置為NO。 |
| 只讀屬性 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
URL |
NSURL |
初始化AVAsset的URL。 |
assetCache |
AVAssetCache |
提供對AVAssetCache實例的訪問,以用于檢查本地緩存的媒體數(shù)據(jù)。如果AVAsset尚未配置為存儲或訪問磁盤中的媒體數(shù)據(jù),則此屬性的值將為nil。 |
mayRequireContent KeysForMediaData Processing |
BOOL |
允許將AVURLAsset作為內(nèi)容鍵接收者添加到AVContentKeySession。 |
resourceLoader |
AVAssetResourceLoader |
與AVAsset關(guān)聯(lián)的資源加載程序。在加載過程中,可能會要求資源加載器對象協(xié)助加載資源。例如,需要解密的資源可能導(dǎo)致資源裝入器被要求提供適當(dāng)?shù)慕饷苊荑€。可以將委托對象分配給資源加載器對象,并使用委托來攔截這些請求并提供適當(dāng)?shù)捻憫?yīng)。 |
2、查找兼容的軌道
返回一個AVAssetTrack,可以從中將任何時間范圍插入到給定的合成軌道中。
- (AVAssetTrack *)compatibleTrackForCompositionTrack:(AVCompositionTrack *)compositionTrack;
- 參數(shù)
compositionTrack:請求兼容的AVAssetTrack對象的合成軌道。
使用AVMutableCompositionTrack的-insertTimeRange:ofTrack:atTime:error:方法插入軌道;這個方法是-mutableTrackCompatibleWithTrack:的邏輯補充。
3、獲得支持的媒體類型
//返回AVURLAsset類支持的MIME類型的字符串?dāng)?shù)組。
+ (NSArray<NSString *> *)audiovisualMIMETypes;
包含UTI的字符串?dāng)?shù)組,用于標(biāo)識AVURLAsset支持的文件類型。
+ (NSArray<AVFileType> *)audiovisualTypes;
/* 指示AVAsset是否可以使用給定的編解碼器和容器類型播放。
* 參數(shù)extendedMIMEType :擴(kuò)展的MIME類型字符串,例如video / 3gpp2; codecs =“mp4v.20.9,mp4a.E1”或audio / aac;codecs=“mp4a.E1”。
*/
+ (BOOL)isPlayableExtendedMIMEType:(NSString *)extendedMIMEType;