AVAssetTrack 为AVAsset
的媒体轨道提供轨道级检查界面的对象。
1、检索跟踪信息
只读属性 |
数据类型 |
描述 |
asset |
AVAsset |
轨道所属的AVAsset 。 |
trackID |
CMPersistentTrackID |
该轨道的唯一标识符。 |
mediaType |
AVMediaType |
轨道的媒体类型;例如AVMediaTypeVideo ,AVMediaTypeAudio 或AVMediaTypeSubtitle 。 |
enabled |
BOOL |
指示是否根据存储在其容器中的状态启用轨道。对于基于文件的媒体,可以使用AVPlayerItemTrack 更改其启用的演示文稿状态。 |
playable |
BOOL |
指示轨道是否可在当前环境中播放;如果为YES,则可以启用使用轨道资源初始化的AVPlayerItem 的AVPlayerItemTrack 进行回放。 |
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;
网友评论