一碧聪、不可變對(duì)象AVCompositionTrack
AVCompositionTrack 繼承自AVAssetTrack
冒版,該對(duì)象中的軌道,由媒體類(lèi)型逞姿,軌道標(biāo)識(shí)符和軌道片段組成辞嗡。
合成軌道中第一個(gè)軌道段的target.timeRange.start
是kCMTimeZero
,每個(gè)后續(xù)軌道段的target.timeRange.start
等于CMTimeRangeGetEnd(target.timeRange)
滞造。
//合成軌道的軌道段续室。
@property(nonatomic, readonly, copy) NSArray<AVCompositionTrackSegment *> *segments;
- (AVCompositionTrackSegment *)segmentForTrackTime:(CMTime)trackTime;
AVFoundation
框架還提供了一個(gè)可變子類(lèi)AVMutableCompositionTrack
。
二谒养、可變對(duì)象AVMutableCompositionTrack
AVMutableCompositionTrack 繼承自AVCompositionTrack
挺狰,合成對(duì)象中的可變軌道,用于插入买窟,移除和縮放軌道片段丰泊,而不會(huì)影響其低級(jí)別表示。
AVCompositionTrack
定義了軌道段時(shí)間對(duì)齊的約束始绍。如果在可變組合中設(shè)置軌道段數(shù)組瞳购,則可以使用-validateTrackSegments:error:
測(cè)試這些段是否滿(mǎn)足約束條件。
1亏推、管理時(shí)間范圍
1.1苛败、擴(kuò)展空時(shí)間范圍
- (void)insertEmptyTimeRange:(CMTimeRange)timeRange;
在接收器中添加或擴(kuò)展空時(shí)間范圍:
- 參數(shù)
timeRange
:要插入的空時(shí)間范圍。
如果在軌道中插入空的時(shí)間范圍径簿,則在插入之前的該間隔期間顯示的任何媒體將立即顯示罢屈。
插入數(shù)據(jù)的性質(zhì)取決于軌道的媒體類(lèi)型;例如篇亭,聲道中的空時(shí)間范圍呈現(xiàn)靜音缠捌。
1.2、插入源軌道的時(shí)間范圍
- (BOOL)insertTimeRange:(CMTimeRange)timeRange
ofTrack:(AVAssetTrack *)track
atTime:(CMTime)startTime
error:(NSError * _Nullable *)outError;
- 參數(shù)
timeRange
:要插入的軌道的時(shí)間范圍译蒂。 - 參數(shù)
track
:要插入的源軌道曼月。 - 參數(shù)
startTime
:由合成軌道表示的軌道出現(xiàn)的時(shí)間。 - 參數(shù)
outError
:如果未成功插入track
柔昼,則返回NSError
哑芹。 - 返回值:如果已成功插入軌道,則為YES捕透,否則為NO聪姿。
默認(rèn)情況下碴萧,插入軌道的時(shí)間范圍以其自然持續(xù)時(shí)間和速率顯示∧┕海可以使用-scaleTimeRange:toDuration:
將其縮放到不同的持續(xù)時(shí)間(以便以不同的速率顯示)破喻。
例如,如果嘗試插入的AVAsset
受到復(fù)制保護(hù)的限制盟榴,則插入可能會(huì)失敗曹质。
1.3、將多個(gè)源軌道的timeRanges插入到合成軌道中
- (BOOL)insertTimeRanges:(NSArray<NSValue *> *)timeRanges
ofTracks:(NSArray<AVAssetTrack *> *)tracks
atTime:(CMTime)startTime
error:(NSError * _Nullable *)outError;
- 參數(shù)
timeRanges
:包含CMTimeRange
結(jié)構(gòu)的NSValue
對(duì)象數(shù)組擎场,指示要插入的時(shí)間范圍羽德。 - 參數(shù)
tracks
:要插入的源軌道。僅支持AVURLAsset
實(shí)例迅办。 - 參數(shù)
startTime
:插入軌道由合成軌道呈現(xiàn)的時(shí)間玩般。 - 參數(shù)
outError
:發(fā)生錯(cuò)誤時(shí),返回NSError
;例如礼饱,選擇插入合成中的資源受到復(fù)制保護(hù)的限制坏为。 - 返回值:如果插入成功則為YES,否則為NO镊绪。
對(duì)于每個(gè)timeRange/track
對(duì)匀伏,此方法等效于調(diào)用-insertTimeRange:ofTrack:atTime:error:
。
如果此方法返回錯(cuò)誤蝴韭,則不會(huì)將任何時(shí)間范圍插入合成軌道够颠。
要指定空時(shí)間范圍,請(qǐng)為軌道傳遞NSNull
對(duì)象榄鉴,并以kCMTimeInvalid
開(kāi)始時(shí)間范圍履磨,并使用所需空編輯的持續(xù)時(shí)間。
1.4庆尘、移除指定的時(shí)間范圍
- (void)removeTimeRange:(CMTimeRange)timeRange;
- 參數(shù)
timeRange
:要?jiǎng)h除的時(shí)間范圍剃诅。
刪除時(shí)間范圍不會(huì)導(dǎo)致從合成中刪除軌道。相反驶忌,它會(huì)刪除或截?cái)嗯c時(shí)間范圍相交的軌道段矛辕。
1.5、更改持續(xù)時(shí)間
- (void)scaleTimeRange:(CMTimeRange)timeRange
toDuration:(CMTime)duration;
更改接收器中時(shí)間范圍的持續(xù)時(shí)間:
- 參數(shù)
timeRange
:要縮放的軌道的時(shí)間范圍付魔。 - 參數(shù)
duration
:新的持續(xù)時(shí)間范圍聊品。
受縮放操作影響的每個(gè)軌道段將以等于其結(jié)果timeMapping
的source.duration/target.duration
的速率呈現(xiàn)。
1.6几苍、合成軌道的軌道段
合成軌道的軌道段數(shù)組翻屈。
@property(nonatomic, copy) NSArray<AVCompositionTrackSegment *> *segments;
合成軌道中第一個(gè)軌道段的target.timeRange.start
必須是kCMTimeZero
,并且每個(gè)后續(xù)軌道段的target.timeRange.start
必須等于CMTimeRangeGetEnd(target.timeRange)
妻坝∩炜簦可以使用-validateTrackSegments:error:
確保軌道段數(shù)組符合此規(guī)則惊窖。
2、驗(yàn)證片斷
返回一個(gè)布爾值赚抡,指示給定的軌道段數(shù)組是否符合合成軌道的時(shí)間規(guī)則爬坑。
- (BOOL)validateTrackSegments:(NSArray<AVCompositionTrackSegment *> *)trackSegments
error:(NSError * _Nullable *)outError;
可以使用此方法確保軌道段數(shù)組適合設(shè)置為segments
屬性的值纠屋。合成軌道中第一個(gè)軌道段的target.timeRange.start
必須是kCMTimeZero
涂臣,并且每個(gè)后續(xù)軌道段的target.timeRange.start
必須等于CMTimeRangeGetEnd(target.timeRange)
。
如果要修改現(xiàn)有的段數(shù)組售担,可以創(chuàng)建它的可變副本赁遗,修改可變數(shù)組,然后使用此方法驗(yàn)證可變數(shù)組族铆。
3岩四、配置軌道屬性
屬性 | 數(shù)據(jù)類(lèi)型 | 描述 |
---|---|---|
languageCode |
NSString |
與軌道相關(guān)的語(yǔ)言為ISO 639-2/T ;默認(rèn)為nil 哥攘。 |
extendedLanguageTag |
NSString |
與軌道關(guān)聯(lián)的語(yǔ)言標(biāo)記為RFC 4646 剖煌;默認(rèn)為nil 。 |
naturalTimeScale |
CMTimeScale |
不需要額外的數(shù)值轉(zhuǎn)換就可以對(duì)軌道的時(shí)間值進(jìn)行操作的時(shí)間尺度逝淹。如果沒(méi)有設(shè)置耕姊,則該值為第一個(gè)非空編輯的自然時(shí)間尺度,如果沒(méi)有非空編輯栅葡,則為600茉兰。將值設(shè)置為0以恢復(fù)為默認(rèn)行為。 |
preferredTransform |
CGAffineTransform |
視頻數(shù)據(jù)的首選轉(zhuǎn)換用于顯示目的欣簇;默認(rèn)為CGAffineTransformIdentity 规脸。 |
preferredVolume |
float |
可聽(tīng)媒體數(shù)據(jù)的首選音量;默認(rèn)為1.0熊咽。 |
4莫鸭、實(shí)例方法
- (void)addTrackAssociationToTrack:(AVCompositionTrack *)compositionTrack
type:(AVTrackAssociationType)trackAssociationType;
- (void)removeTrackAssociationToTrack:(AVCompositionTrack *)compositionTrack
type:(AVTrackAssociationType)trackAssociationType;