OC之插入惩妇,移除和縮放軌道片段AVCompositionTrack

一碧聪、不可變對(duì)象AVCompositionTrack

AVCompositionTrack 繼承自AVAssetTrack冒版,該對(duì)象中的軌道,由媒體類(lèi)型逞姿,軌道標(biāo)識(shí)符和軌道片段組成辞嗡。

合成軌道中第一個(gè)軌道段的target.timeRange.startkCMTimeZero,每個(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é)果timeMappingsource.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;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市横殴,隨后出現(xiàn)的幾起案子黔龟,更是在濱河造成了極大的恐慌,老刑警劉巖滥玷,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氏身,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惑畴,警方通過(guò)查閱死者的電腦和手機(jī)蛋欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)如贷,“玉大人陷虎,你說(shuō)我怎么就攤上這事到踏。” “怎么了尚猿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵窝稿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我凿掂,道長(zhǎng)伴榔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任庄萎,我火速辦了婚禮踪少,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糠涛。我一直安慰自己援奢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布忍捡。 她就那樣靜靜地躺著集漾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砸脊。 梳的紋絲不亂的頭發(fā)上具篇,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音脓规,去河邊找鬼栽连。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侨舆,可吹牛的內(nèi)容都是我干的秒紧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挨下,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼熔恢!你這毒婦竟也來(lái)了岔帽?” 一聲冷哼從身側(cè)響起骗绕,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雷滋,失蹤者是張志新(化名)和其女友劉穎缓淹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體脸侥,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豹休,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年磷瘤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茵乱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂洒。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瓶竭,靈堂內(nèi)的尸體忽然破棺而出督勺,到底是詐尸還是另有隱情渠羞,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布智哀,位于F島的核電站次询,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瓷叫。R本人自食惡果不足惜屯吊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赞辩。 院中可真熱鬧雌芽,春花似錦辨嗽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谷朝,卻和暖如春圆凰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挑童。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工跃须, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尽楔,地道東北人第练。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓呕寝,卻偏偏與公主長(zhǎng)得像驹碍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怔球,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 2016-10-8-小馮 錢(qián)崭歧,就像內(nèi)褲,你得有,但不必逢人就證明你有所宰。 干事業(yè)仔粥,就像懷孕谭羔,得夠月口糕,著急了...
    瑞霞微陽(yáng)閱讀 251評(píng)論 0 0
  • 2017氧苍,感謝陪伴紊撕,感謝支持。 2018,我會(huì)繼續(xù)給你們講故事拜效。 今天是2017年12月31日。我在家般眉,你,在哪埠对?...
    她是球球呀閱讀 168評(píng)論 0 2
  • 昨天參加總公司培訓(xùn),由歐亞管理咨詢(xún)有限公司宋歌老師主講,主要培訓(xùn)內(nèi)容是非職權(quán)影響力(擺平人)固灵。 給人留下...
    拆擁閱讀 7,249評(píng)論 0 1
  • 今天的霧好大把透浮!早上起床怎虫,看到外面白茫茫的暑认,還以為下雪了,一冬無(wú)雪的日子大审,真讓人懷念以前下雪的時(shí)候蘸际。吃早飯的時(shí)候,...
    皓軒寶貝閱讀 106評(píng)論 0 1