AVFoundation编程指南09-AVAsset解读(上)

写在前面

喜欢AVFoundation资料的同学可以关注我的专题:《AVFoundation》专辑
也可以关注我的简书账号

正文

AVAsset是一个抽象类,它定义AVFoundation的定时音视频媒体模型。

每个AVAsset包含旨在一起呈现或处理的track集合,每个track均匀的媒体类型,包括但不限于音频,视频,文本,隐藏式字幕和字幕。

AVAssets通常通过其具体的子类AVURLAsset实例化,NSURL引用音视频媒体asset,例如流(包括HTTP实时流),QuickTime视频文件,MP3文件和其他类型的文件。

它们也可以使用其他具体子类进行实例化,这些子类以有用的方式扩展视听媒体的基本模型,就像AVComposition进行时间编辑一样。

整个asset的属性由AVAsset定义。另外,可以获得对表示集合的轨道的AVAssetTracks的实例的引用,从而可以独立地检查这些中的每一个。

由于定时视听媒体的性质,在成功初始化AVAsset时,其密钥的一些或所有值可能不会立即可用。任何键的值都可以随时请求,并且AVAsset将始终同步返回其值,尽管它可能必须阻塞调用线程才能这样做。

为了避免阻塞,客户可以注册他们对特定密钥,并在其值可用时收到通知。有关更多详细信息,请参见AVAsynchronousKeyValueLoading.h

iOS上,避免阻止尤为重要。为了保持响应性,阻塞太长时间的同步请求(例如,对慢速HTTP服务器上的asset的属性请求)可能导致重置媒体服务。

要播放AVAsset的实例,使用它初始化AVPlayerItem的实例,使用AVPlayerItem设置其呈现状态(例如是否应该播放asset的有限timeRange等),并将AVPlayerItem提供给AVPlayer根据项目是单独播放还是与其他项目集合一起播放。 AVPlayerItem.hAVPlayer.h中提供的完整详细信息。

AVAssets也可以插入到AVMutableCompositions中,以便从一个或多个源资源中组合视听结构。

AVAsset数据结构

AVAsset数据结构图如下:

AVAsset数据结构

AVAsset属性和方法

+ (instancetype)assetWithURL:(NSURL *)URL;

返回使用指定的URL初始化的AVAsset子类的新的初始化实例。

@property (nonatomic, readonly) CMTime duration;

表示asset的持续时间。如果@“providePreciseDurationAndTiming”NO,则返回最佳可用的持续时间估计值。对于与URL初始化的asset,可以在初始化时设置与时序相关的属性首选的精度。请参阅下面的AVURLAssetAVURLAssetPreferPreciseDurationAndTimingKey

@property (nonatomic, readonly) float preferredRate;

表示assetnatural rate;经常但不总是1.0

@property (nonatomic, readonly) float preferredVolume;

表示要播放asset的可听媒体的首选音量;经常但不总是1.0

@property (nonatomic, readonly) CGAffineTransform preferredTransform;

表示要应用于asset的可视内容以进行呈现或处理的首选变换;值通常但不总是identity变换

@property (nonatomic, readonly) CGSize naturalSize NS_DEPRECATED(10_7, 10_8, 4_0, 5_0);

不推荐使用以下属性。相反,请根据需要使用接收器视频轨道的naturalSizepreferredTransform。请参阅下面的-tracksWithMediaType:

@property (nonatomic, readonly) AVDisplayCriteria *preferredDisplayCriteria API_AVAILABLE(tvos(11.2)) API_UNAVAILABLE(ios) API_UNAVAILABLE(macos, watchos);

指导显示模式,最适合播放此特定的asset

AVAssetAsynchronousLoading

@property (nonatomic, readonly) BOOL providesPreciseDurationAndTiming;

表示asset提供精确的时间。请参阅上面的@ duration和下面的AVURLAssetPreferPreciseDurationAndTimingKey

- (void)cancelLoading;

如果任何加载请求仍未完成,则取消分配或完成AVAsset实例将隐式取消加载。

AVAssetReferenceRestrictions

可以将这些常量传递给AVURLAssetReferenceRestrictionsKey,以控制对外部媒体数据的引用的解析。

typedef NS_OPTIONS(NSUInteger, AVAssetReferenceRestrictions) {
AVAssetReferenceRestrictionForbidNone = 0UL,
AVAssetReferenceRestrictionForbidRemoteReferenceToLocal = (1UL << 0),
AVAssetReferenceRestrictionForbidLocalReferenceToRemote = (1UL << 1),
AVAssetReferenceRestrictionForbidCrossSiteReference = (1UL << 2),
AVAssetReferenceRestrictionForbidLocalReferenceToLocal = (1UL << 3),
AVAssetReferenceRestrictionForbidAll = 0xFFFFUL,
};

其中各个选项的含义如下:

  • AVAssetReferenceRestrictionForbidNone: 表示应遵循所有类型的引用。

  • AVAssetReferenceRestrictionForbidRemoteReferenceToLocal: 指示不应遵循从远程asset(例如,通过http URL引用)到本地媒体数据(例如,存储在本地文件中)的引用。

  • AVAssetReferenceRestrictionForbidLocalReferenceToRemote: 表示不应遵循从本地asset到远程媒体数据的引用。

  • AVAssetReferenceRestrictionForbidCrossSiteReference: 表示不应遵循从远程asset到存储在其他站点的远程媒体数据的引用。

  • AVAssetReferenceRestrictionForbidLocalReferenceToLocal: 表示不应遵循从本地asset到存储在asset容器文件外部的本地媒体数据的引用。

  • AVAssetReferenceRestrictionForbidAll: 表示应仅允许对存储在asset容器文件中的媒体数据的引用。

    @property (nonatomic, readonly) AVAssetReferenceRestrictions referenceRestrictions NS_AVAILABLE(10_7, 5_0);
    

表示接收器使用的参考限制。

对于AVURLAsset,此属性反映了AVURLAssetReferenceRestrictionsKey传入的值(如果有)。有关参考限制的完整讨论,请参阅下面的AVURLAssetReferenceRestrictionsKey。此属性的默认值为AVAssetReferenceRestrictionForbidNone

AVAssetTrackInspection

@property (nonatomic, readonly) NSArray<AVAssetTrack *> *tracks;

提供asset包含的AVAssetTracks数组

- (nullable AVAssetTrack *)trackWithTrackID:(CMPersistentTrackID)trackID;
函数名 trackWithTrackID:
函数解释 提供表示指定trackID轨道的AVAssetTrack实例。
参数 trackID:请求的AVAssetTrack的trackID
返回值 AVAssetTrack的一个实例;如果没有指定trackID的跟踪可用,则可以为nil
备注 当加载了key @“tracks”时,变为可调用而不会阻塞状态
- (NSArray<AVAssetTrack *> *)tracksWithMediaType:(AVMediaType)mediaType;
函数名 tracksWithMediaType:
函数解释 提供assetAVAssetTracks数组,用于显示指定媒体类型的媒体。
参数 mediaType:
AVAsset过滤其AVAssetTracks的媒体类型。 (媒体类型在AVMediaFormat.h中定义。)
返回值 AVAsetTracksNSArray;如果没有指定媒体类型的曲目可用,则可能为空。
备注 当加载了key @“tracks”时,变为可调用而不会阻塞状态
- (NSArray<AVAssetTrack *> *)tracksWithMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;
函数名 tracksWithMediaCharacteristic:
函数解释 提供assetAVAssetTracks数组,以呈现具有指定特征的媒体。
参数 mediaCharacteristic:
根据AVAsset过滤其AVAssetTracks的媒体特性。 (媒体特征在AVMediaFormat.h中定义。)
返回值 AVAsetTracks的NSArray;如果没有具有指定特征的tracks可用,则可能为空。
备注 当加载了key @“tracks”时,变为可调用而不会阻塞状态
@property (nonatomic, readonly) NSArray<AVAssetTrackGroup *> *trackGroups NS_AVAILABLE(10_9, 7_0);
函数名 trackGroups
函数解释 接收器中的所有track组。
备注 此属性的值是AVAssetTrackGroupsNSArray,每个NSArray表示接收器中不同的track分组。

AVAssetMetadataReading

@property (nonatomic, readonly, nullable) AVMetadataItem *creationDate NS_AVAILABLE(10_8, 5_0);

表示asset的创建日期为AVMetadataItem。可能是nil。如果asset以可转换为NSDate的形式存储创建日期,则AVMetadataItemdateValue属性将提供NSDate的实例。否则,创建日期仅作为字符串值,通过 - [AVMetadataItem stringValue]

@property (nonatomic, readonly, nullable) NSString *lyrics;

提供对适合当前区域设置的assetlyrics的访问。

@property (nonatomic, readonly) NSArray<AVMetadataItem *> *commonMetadata;

为每个可用值的公共元数据键提供对AVMetadataItems数组的访问;可以通过+ [AVMetadataItem metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:]并根据标识符+ [AVMetadataItem metadataItemsFromArray:filteredByIdentifier:]根据语言过滤项目。

@property (nonatomic, readonly) NSArray<AVMetadataItem *> *metadata NS_AVAILABLE(10_10, 8_0);

为所有可用值的元数据标识符提供对AVMetadataItems数组的访问;可以通过+ [AVMetadataItem metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:]并根据标识符+ [AVMetadataItem metadataItemsFromArray:filteredByIdentifier:]根据语言过滤项目。

@property (nonatomic, readonly) NSArray<AVMetadataFormat> *availableMetadataFormats;

提供NSStringsNSArray,每个NSAtrray表示asset可用的Metadata格式(例如ID3iTunes 元数据等)。metadata格式在AVMetadataFormat.h中定义。

- (NSArray<AVMetadataItem *> *)metadataForFormat:(AVMetadataFormat)format;
函数名 metadataForFormat:
函数解释 提供AVMetadataItemsNSArray,一个用于指定格式的容器中的每个元数据项;随后可以根据语言通过+ [AVMetadataItem metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:],根据语言环境+ [AVMetadataItem metadataItemsFromArray:withLocale:],或根据键+ [AVMetadataItem metadataItemsFromArray:withKey:keySpace:]进行过滤。
参数 format
请求项目的metadata格式。
返回值 包含AVMetadataItemsNSArray;如果没有指定格式的metadata,则可能为空。
备注 加载key @“availableMetadataFormats”后,变为可调用而不会阻塞状态

AVAssetChapterInspection

@property (readonly) NSArray<NSLocale *> *availableChapterLocales NS_AVAILABLE(10_7, 4_3);

NSLocale数组。

- (NSArray<AVTimedMetadataGroup *> *)chapterMetadataGroupsWithTitleLocale:(NSLocale *)locale containingItemsWithCommonKeys:(nullable NSArray<AVMetadataKey> *)commonKeys NS_AVAILABLE(10_7, 4_3);
函数名 chapterMetadataGroupsWithTitleLocale:containingMetadataItemsWithCommonKeys:
函数解释 提供一个chapter数组。
参数 locale:
携带要返回的chapter``titlemetadata items的区域设置(支持IETF BCP 47规范)。
commonKeys:
要包含的AVMetadataItem的公共key的数组;可以是nil
AVMetadataCommonKeyArtwork是目前唯一受支持的key
返回值 返回AVTimedMetadataGroup的数组。
备注 此方法返回AVTimedMetadataGroup对象的数组。数组中的每个对象始终包含一个表示章节标题的AVMetadataItem; AVTimedMetadataGroup对象的timeRange属性等于chapter title item的时间范围。

如果metadata itemmetadata group的时间范围(时间戳和持续时间)重叠,则具有指定公共keyAVMetadataItem将添加到现有AVTimedMetadataGroup对象。不带chapter titlesitem的区域设置不需要与指定的区域设置参数匹配。

可以使用+ [AVMetadataItem metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:]来完成根据语言对AVTimedMetadataGroups中的metadata items的进一步过滤;可以使用+ [AVMetadataItem metadataItemsFromArray:withLocale:]来完成根据区域设置过滤metadata items

AVAssetMediaSelection

@property (nonatomic, readonly) NSArray<AVMediaCharacteristic> *availableMediaCharacteristicsWithMediaSelectionOptions NS_AVAILABLE(10_8, 5_0);

提供NSStringsNSArray,每个NSString指示媒体选择选项可用的媒体特征。

- (nullable AVMediaSelectionGroup *)mediaSelectionGroupForMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic NS_AVAILABLE(10_8, 5_0);
函数名 mediaSelectionGroupForMediaCharacteristic:
函数解释 提供AVMediaSelectionGroup的实例,其中包含具有指定媒体特征的一个或多个选项。
参数 mediaCharacteristic:

你希望获得可用媒体选择选项的媒体特性。目前支持AVMediaCharacteristicAudible,AVMediaCharacteristicLegibleAVMediaCharacteristicVisual

通过AVMediaCharacteristicAudible获取各种语言和各种用途的音频媒体的可用选项组,例如描述性音频。

传递AVMediaCharacteristicLegible以获取各种语言和各种用途的字幕的可用选项组。

传递AVMediaCharacteristicVisual以获取视频媒体的可用选项组。
返回值 AVMediaSelectionGroup的一个实例。可能是nil
备注 加载key @“availableMediaCharacteristicsWithMediaSelectionOptions”后,变为可调用而不会阻塞状态。

如果asset没有包含具有指定媒体特征的选项的AVMediaSelectionGroup,则返回值将为nil

可以使用AVMediaSelectionGroup上定义的AVMediaSelectionOptionFiltering类别来完成根据可播放性,区域设置和其他媒体特征过滤返回的AVMediaSelectionGroup中的选项。
@property (nonatomic, readonly) AVMediaSelection *preferredMediaSelection NS_AVAILABLE(10_11, 9_0);
函数名 preferredMediaSelection
函数解释 提供AVMediaSelection的实例,为每个接收者的媒体选择组提供默认选择。
@property (nonatomic, readonly) NSArray <AVMediaSelection *> *allMediaSelections NS_AVAILABLE(10_13, 11_0);
函数名 allMediaSelections
函数解释 提供此assetAVMediaSelection的所有排列的数组。
备注 加载key @ “availableMediaCharacteristicsWithMediaSelectionOptions”后,变为可调用而不会阻塞状态。

AVAssetProtectedContent

@property (nonatomic, readonly) BOOL hasProtectedContent NS_AVAILABLE(10_7, 4_2);
函数名 hasProtectedContent
函数介绍 指示asset是否具有受保护的内容。
备注 未经成功授权,包含受保护内容的asset可能无法播放,即使"playable"属性的值为YES。有关如何使用此类asset的详细信息,请参阅AVAssetUsability类别中的属性。在OS X上,客户端可以使用AVPlayerItemProtectedContentAdditions.h中的接口来请求授权来播放asset

AVAssetFragments

@property (nonatomic, readonly) BOOL canContainFragments NS_AVAILABLE(10_11, 9_0);
函数名 canContainFragments
函数解释 指示asset是否能够通过片段进行扩展。
备注 对于QuickTime电影文件和MPEG-4文件,如果'moov'框中存在'mvex'框,则canContainFragments的值为YES。对于那些类型,'mvex'框表示可能存在后来的'moof'框。
@property (nonatomic, readonly) BOOL containsFragments NS_AVAILABLE(10_11, 9_0);
函数名 containsFragments
函数解释 指示asset是否至少由一个片段扩展。
备注 对于QuickTime影片文件和MPEG-4文件,如果canContainFragmentsYES“moov”框后面至少有一个“moof”框,则此属性的值为YES
@property (nonatomic, readonly) CMTime overallDurationHint NS_AVAILABLE(10_12_2, 10_2);
函数名 overallDurationHint
函数解释 指示现在存在或可能在将来附加的片段的总持续时间,以便延长asset的持续时间。
备注 对于QuickTime影片文件和MPEG-4文件,此属性的值是从“mvex”框的“mehd”框中获取的(如果存在)。如果没有可用的总片段持续时间提示,则此属性的值为kCMTimeInvalid

AVAssetUsability

@property (nonatomic, readonly, getter=isPlayable) BOOL playable NS_AVAILABLE(10_7, 4_3);
属性名 playable
函数解释 指示AVPlayer是否可以满足用户期望的方式播放asset的内容。
备注 playableNo时,客户端可以尝试播放,但是这可能导致不合标准的播放体验。
@property (nonatomic, readonly, getter=isExportable) BOOL exportable NS_AVAILABLE(10_7, 4_3);

指示AVAssetExportSession是否可以与receiver一起用于export

@property (nonatomic, readonly, getter=isReadable) BOOL readable NS_AVAILABLE(10_7, 4_3);

指示AVAssetReader是否可以与receiver一起使用以提取媒体数据

@property (nonatomic, readonly, getter=isComposable) BOOL composable NS_AVAILABLE(10_7, 4_3);

指示receiver是否可用于构建AVMutableComposition

 @property (nonatomic, readonly, getter=isCompatibleWithSavedPhotosAlbum) BOOL compatibleWithSavedPhotosAlbum NS_AVAILABLE_IOS(5_0);
  • TARGET_OS_IPHONE环境下才适用

表示receiver是否可以写入保存的相册

@property (nonatomic, readonly, getter=isCompatibleWithAirPlayVideo) BOOL compatibleWithAirPlayVideo NS_AVAILABLE(10_11, 9_0);
函数名 compatibleWithAirPlayVideo
解释 指示asset是否与AirPlay Video兼容。
备注 如果使用receiver初始化的AVPlayerItem可以由外部设备通过AirPlay Video播放,则为YES
上一章 目录 下一章
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容