写在前面
喜欢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.h和AVPlayer.h中提供的完整详细信息。
AVAssets也可以插入到AVMutableCompositions中,以便从一个或多个源资源中组合视听结构。
AVAsset数据结构
AVAsset数据结构图如下:

AVAsset属性和方法
+ (instancetype)assetWithURL:(NSURL *)URL;
返回使用指定的URL初始化的AVAsset子类的新的初始化实例。
@property (nonatomic, readonly) CMTime duration;
表示asset的持续时间。如果@“providePreciseDurationAndTiming”为NO,则返回最佳可用的持续时间估计值。对于与URL初始化的asset,可以在初始化时设置与时序相关的属性首选的精度。请参阅下面的AVURLAsset的AVURLAssetPreferPreciseDurationAndTimingKey。
@property (nonatomic, readonly) float preferredRate;
表示asset的natural 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);
不推荐使用以下属性。相反,请根据需要使用接收器视频轨道的naturalSize和preferredTransform。请参阅下面的-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(例如,通过httpURL引用)到本地媒体数据(例如,存储在本地文件中)的引用。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: |
|---|---|
| 函数解释 | 提供asset的AVAssetTracks数组,用于显示指定媒体类型的媒体。 |
| 参数 |
mediaType:AVAsset过滤其AVAssetTracks的媒体类型。 (媒体类型在AVMediaFormat.h中定义。) |
| 返回值 |
AVAsetTracks的NSArray;如果没有指定媒体类型的曲目可用,则可能为空。 |
| 备注 | 当加载了key @“tracks”时,变为可调用而不会阻塞状态 |
- (NSArray<AVAssetTrack *> *)tracksWithMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;
| 函数名 | tracksWithMediaCharacteristic: |
|---|---|
| 函数解释 | 提供asset的AVAssetTracks数组,以呈现具有指定特征的媒体。 |
| 参数 |
mediaCharacteristic:根据 AVAsset过滤其AVAssetTracks的媒体特性。 (媒体特征在AVMediaFormat.h中定义。) |
| 返回值 |
AVAsetTracks的NSArray;如果没有具有指定特征的tracks可用,则可能为空。 |
| 备注 | 当加载了key @“tracks”时,变为可调用而不会阻塞状态 |
@property (nonatomic, readonly) NSArray<AVAssetTrackGroup *> *trackGroups NS_AVAILABLE(10_9, 7_0);
| 函数名 | trackGroups |
|---|---|
| 函数解释 | 接收器中的所有track组。 |
| 备注 | 此属性的值是AVAssetTrackGroups的NSArray,每个NSArray表示接收器中不同的track分组。 |
AVAssetMetadataReading
@property (nonatomic, readonly, nullable) AVMetadataItem *creationDate NS_AVAILABLE(10_8, 5_0);
表示asset的创建日期为AVMetadataItem。可能是nil。如果asset以可转换为NSDate的形式存储创建日期,则AVMetadataItem的dateValue属性将提供NSDate的实例。否则,创建日期仅作为字符串值,通过 - [AVMetadataItem stringValue]。
@property (nonatomic, readonly, nullable) NSString *lyrics;
提供对适合当前区域设置的asset的lyrics的访问。
@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;
提供NSStrings的NSArray,每个NSAtrray表示asset可用的Metadata格式(例如ID3,iTunes 元数据等)。metadata格式在AVMetadataFormat.h中定义。
- (NSArray<AVMetadataItem *> *)metadataForFormat:(AVMetadataFormat)format;
| 函数名 | metadataForFormat: |
|---|---|
| 函数解释 | 提供AVMetadataItems的NSArray,一个用于指定格式的容器中的每个元数据项;随后可以根据语言通过+ [AVMetadataItem metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:],根据语言环境+ [AVMetadataItem metadataItemsFromArray:withLocale:],或根据键+ [AVMetadataItem metadataItemsFromArray:withKey:keySpace:]进行过滤。 |
| 参数 |
format请求项目的 metadata格式。 |
| 返回值 | 包含AVMetadataItems的NSArray;如果没有指定格式的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``title的metadata items的区域设置(支持IETF BCP 47规范)。commonKeys:要包含的 AVMetadataItem的公共key的数组;可以是nil。AVMetadataCommonKeyArtwork是目前唯一受支持的key。 |
| 返回值 | 返回AVTimedMetadataGroup的数组。 |
| 备注 | 此方法返回AVTimedMetadataGroup对象的数组。数组中的每个对象始终包含一个表示章节标题的AVMetadataItem; AVTimedMetadataGroup对象的timeRange属性等于chapter title item的时间范围。如果 metadata item和metadata group的时间范围(时间戳和持续时间)重叠,则具有指定公共key的AVMetadataItem将添加到现有AVTimedMetadataGroup对象。不带chapter titles的item的区域设置不需要与指定的区域设置参数匹配。可以使用 + [AVMetadataItem metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:]来完成根据语言对AVTimedMetadataGroups中的metadata items的进一步过滤;可以使用+ [AVMetadataItem metadataItemsFromArray:withLocale:]来完成根据区域设置过滤metadata items。 |
AVAssetMediaSelection
@property (nonatomic, readonly) NSArray<AVMediaCharacteristic> *availableMediaCharacteristicsWithMediaSelectionOptions NS_AVAILABLE(10_8, 5_0);
提供NSStrings的NSArray,每个NSString指示媒体选择选项可用的媒体特征。
- (nullable AVMediaSelectionGroup *)mediaSelectionGroupForMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic NS_AVAILABLE(10_8, 5_0);
| 函数名 | mediaSelectionGroupForMediaCharacteristic: |
|---|---|
| 函数解释 | 提供AVMediaSelectionGroup的实例,其中包含具有指定媒体特征的一个或多个选项。 |
| 参数 |
mediaCharacteristic:你希望获得可用媒体选择选项的媒体特性。目前支持 AVMediaCharacteristicAudible,AVMediaCharacteristicLegible和AVMediaCharacteristicVisual。通过 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 |
|---|---|
| 函数解释 | 提供此asset的AVMediaSelection的所有排列的数组。 |
| 备注 | 加载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文件,如果canContainFragments为YES且“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的内容。 |
| 备注 | 当playable为No时,客户端可以尝试播放,但是这可能导致不合标准的播放体验。 |
@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。 |
| 上一章 | 目录 | 下一章 |
|---|
