OC之AVAssetTrack

AVAssetTrackAVAsset的媒体轨道提供轨道级检查界面的对象。

1、检索跟踪信息

只读属性 数据类型 描述
asset AVAsset 轨道所属的AVAsset
trackID CMPersistentTrackID 该轨道的唯一标识符。
mediaType AVMediaType 轨道的媒体类型;例如AVMediaTypeVideoAVMediaTypeAudioAVMediaTypeSubtitle
enabled BOOL 指示是否根据存储在其容器中的状态启用轨道。对于基于文件的媒体,可以使用AVPlayerItemTrack更改其启用的演示文稿状态。
playable BOOL 指示轨道是否可在当前环境中播放;如果为YES,则可以启用使用轨道资源初始化的AVPlayerItemAVPlayerItemTrack进行回放。
selfContained BOOL 指示轨道是否引用仅包含在其存储容器中的样本数据;如果轨道仅在其存储容器内引用样本数据,则值为YES,否则为NO。
estimatedDataRate float 由轨道引用的媒体数据的预估数据速率比特每秒。如果未指示数据速率,则该值可以是0.0,并且不能使用存储在媒体资源中的其他信息来计算该值。
totalSampleDataLength longlong 轨道所需的样本数据的总字节数;如果无法确定总样本数据长度,则该值可以是0。
formatDescriptions NSArray 轨道引用的媒体样本的格式描述。
decodable BOOL
//指示轨道是否引用具有指定媒体特征的媒体
- (BOOL)hasMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;

2、检索时间属性

只读属性 数据类型 描述
timeRange CMTimeRange AVAsset总时间轴内的跟踪时间范围。
naturalTimeScale CMTimeScale 时间刻度,其中轨道的时间值可以在没有无关数字转换的情况下操作。

如果timeRange的开始时间大于kCMTimeZero,则在显示其AVAsset时,该轨道最初不会显示媒体数据。可能发生这种情况的一种情况是音频轨道被延迟以便将音频的开始与特定视频帧对齐。可以按如下方式测试:

if CMTIME_COMPARE_INLINE(track.timeRange.start, >, kCMTimeZero) {
 //推迟开始
}

3、检索语言属性

有关语言代码的详细信息,请参阅国际化和本地化指南

只读属性 数据类型 描述
languageCode NSString 与轨道相关的语言,作为 ISO 639-2/T 语言代码。如果没有指明语言,则该值可以是nil。
extendedLanguageTag NSString 与轨道关联的语言标记,作为 BCP 47 语言标记。如果未指示语言标记,则该值可以是nil。

4、检索视觉特征

只读属性 数据类型 描述
naturalSize CGSize 轨道引用的媒体数据的原生尺寸。对于视频轨道,例如视频或字幕轨道,这将返回媒体的naturalSize。对于非视频轨道,例如音频或章节轨道,这将返回CGSizeZero的值。
preferredTransform CGAffineTransform 在轨道的存储容器中指定的转换作为可视媒体数据的首选转换以用于显示目的。此属性的值通常(但不总是)CGAffineTransformIdentity

5、检索声音特征

轨道存储容器中指定的音量作为可听媒体数据的首选音量;通常(但不总是)为1.0;对于不可听的音轨,该值将为0.0。

@property (nonatomic, readonly) float preferredVolume;

6、检索基于帧的特征

只读属性 数据类型 描述
nominalFrameRate float 轨道的帧速率,以每秒帧数为单位。标称帧速率表示每个媒体样本携带全帧的轨道的每秒帧数。对于基于场的(隔行扫描)视频轨道,此属性的值指示场速率,而不是帧速率。
minFrameDuration CMTime 轨道帧的最小持续时间。轨道的最小帧持续时间是其最大帧速率的倒数。例如,具有每秒30帧的最大帧速率的视频轨道将具有1/30(或0.033)的最小帧持续时间。如果轨道的最小帧持续时间未知或无法计算,则此属性的值为kCMTimeInvalid
requiresFrameReordering BOOL 指示轨道中的样本是否可能具有不同的显示值和解码时间戳。

7、寻找轨道段

//从轨道的媒体样本到其时间线的时间映射
@property (nonatomic, copy, readonly) NSArray<AVAssetTrackSegment *> *segments;

//来自segments数组的轨道段对应或最接近trackTime。
- (nullable AVAssetTrackSegment *)segmentForTrackTime:(CMTime)trackTime;

//通过适当的时间映射映射指定的跟踪时间,并返回生成的样本显示时间。与trackTime对应的样本呈现时间; 如果trackTime超出范围,则该值将无效。
- (CMTime)samplePresentationTimeForTrackTime:(CMTime)trackTime;

8、管理元数据

 /* 所有元数据标识符的元数据项数组,其中有一个值可用。
 * 可以使用-metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:方法根据语言过滤AVMetadataItem实例数组。
 * 可以使用- metadataItemsFromArray:filteredByIdentifier:方法通过标识符过滤它们。
 */
@property (nonatomic, readonly) NSArray<AVMetadataItem *> *metadata;

//每个公共元数据键的AVMetadataItem对象数组,其值可用。
@property (nonatomic, readonly) NSArray<AVMetadataItem *> *commonMetadata;

//该数组包含NSString对象,每个对象用于轨道可用的每种元数据格式
@property (nonatomic, readonly) NSArray<AVMetadataFormat> *availableMetadataFormats;


//创建一个元数据对象数组,每个元数据对象对应于指定格式的容器中的每个元数据项。
- (NSArray<AVMetadataItem *> *)metadataForFormat:(AVMetadataFormat)format;
8.1、AVTrackAssociationType常量

AVTrackAssociationType 用于识别其他轨道如何与轨道相关联的常量。

AVTrackAssociationType常量 描述
AVTrackAssociationTypeAudioFallback 从一个音轨到另一个音轨的关联;不支持原始音轨格式的播放器可以使用“fallback”音轨。例如,AVAsset可以包含立体声和5.1声道音轨;在这种情况下,将立体声音轨标记为5.1声道音轨的备用音轨将确保不能播放5.1声道音频的设备仍然可以播放相同的音轨。
AVTrackAssociationTypeChapterList 从一个轨道到另一个包含章节信息的轨道(可能是文本轨道、视频轨道或定时元数据轨道)的关联。
AVTrackAssociationTypeForcedSubtitlesOnly 从一个包含强制和非强制字幕的字幕音轨到另一个仅包含相同内容的强制字幕音轨的关联。非强制字幕通常会转录媒体资源中的所有“normal”对话,并且通常不会默认显示。即使正常字幕被禁用(例如,当一个字符用与音频轨道不同的语言说话时),强制字幕也是必不可少的字幕。
AVTrackAssociationTypeSelectionFollower 从一个轨道到另一个轨道的关联,指定当用户选择第一个轨道时,第二个轨道应被视为适当的默认选择。例如,音频音轨的跟随者可以是相同语言的字幕音轨。当用户选择音频语言时,字幕语言“跟随”音频语言选择。
AVTrackAssociationTypeTimecode 从任何类型的一个轨道到包含原始轨道的定时信息的时间码轨道的关联。
AVTrackAssociationTypeMetadataReferent AVAssetTracks与媒体类型是AVMediaTypeMetadata的可选关联。当元数据轨道缺少此轨道关联时,假定其内容描述或注释整个资产。

9、使用关联轨道

//该数组包含NSString对象,每个类型的关联对应一个对象。
@property (nonatomic, readonly) NSArray<AVTrackAssociationType> *availableTrackAssociationTypes;

//创建一个数组,其中包含与使用指定关联类型的轨道关联的其他轨道。
- (NSArray<AVAssetTrack *> *)associatedTracksOfType:(AVTrackAssociationType)trackAssociationType;

10、创建示例游标

//指示AVAssetTrack是否可以提供AVSampleCursor的实例来遍历其媒体样本并发现信息。
@property (nonatomic, readonly) BOOL canProvideSampleCursors;

/* 创建AVSampleCursor的实例,并将其放置在指定的时间戳附近。
* 如果AVAssetTrack的asset的属性receiverPreciseDurationAndTiming的值为YES,则示例光标准确定位在接收者的最后一个媒体示例上,其显示时间戳小于或等于所需的时间戳,如果没有这样的示例,则为表示顺序中的第一个示例。
* 如果providePreciseDurationAndTiming为NO,并且将精确样本定位在期望的时间戳上非常昂贵,则可以近似定位样本光标。
*/
- (nullable AVSampleCursor *)makeSampleCursorWithPresentationTimeStamp:(CMTime)presentationTimeStamp;

//创建AVSampleCursor的实例,并将其按解码顺序放置在接收器的第一个媒体样本上。
- (nullable AVSampleCursor *)makeSampleCursorAtFirstSampleInDecodeOrder;

//创建AVSampleCursor的实例,并将其按解码顺序放置在接收器的最后一个媒体样本上。
- (nullable AVSampleCursor *)makeSampleCursorAtLastSampleInDecodeOrder;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357