版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2017.08.30 |
前言
AVFoundation
框架是ios中很重要的框架,所有與視頻音頻相關(guān)的軟硬件控制都在這個(gè)框架里面匹表,接下來這幾篇就主要對(duì)這個(gè)框架進(jìn)行介紹和講解。感興趣的可以看我上幾篇。
1. AVFoundation框架解析(一)—— 基本概覽
2. AVFoundation框架解析(二)—— 實(shí)現(xiàn)視頻預(yù)覽錄制保存到相冊(cè)
3. AVFoundation框架解析(三)—— 幾個(gè)關(guān)鍵問題之關(guān)于框架的深度概括
4. AVFoundation框架解析(四)—— 幾個(gè)關(guān)鍵問題之AVFoundation探索(一)
5. AVFoundation框架解析(五)—— 幾個(gè)關(guān)鍵問題之AVFoundation探索(二)
6. AVFoundation框架解析(六)—— 視頻音頻的合成(一)
Introduction
AVFoundation
框架提供了一組功能豐富的類,以便于編輯音視頻資源剂癌。 AVFoundation的編輯API的核心是由AVComposition
對(duì)象定義的組合。 組合僅僅是來自一個(gè)或多個(gè)不同媒體資產(chǎn)的軌道集合翰绊。 AVMutableComposition
類提供了一個(gè)用于插入和刪除軌道以及管理其時(shí)間順序的接口佩谷。 AVComposition對(duì)象中的軌道是固定的旁壮。
如果您想在組合中的軌道上執(zhí)行任何自定義音頻或視頻處理,則需要分別包含音頻混合或視頻構(gòu)圖谐檀。 AVAudioMix
對(duì)象管理用于混合音軌的輸入?yún)?shù)抡谐。 它允許在播放或其他操作期間在音軌上執(zhí)行自定義音頻處理。 您還可以設(shè)置音軌的相對(duì)音量和斜坡桐猬。
視頻構(gòu)圖在其指令的總時(shí)間范圍內(nèi)的任何時(shí)間描述了要用于產(chǎn)生與該時(shí)間對(duì)應(yīng)的合成視頻幀的視頻軌道的數(shù)量和ID麦撵。 當(dāng)使用AV Foundation的內(nèi)置視頻合成器時(shí),視頻合成包含的指令可以為每個(gè)視頻源指定空間變換溃肪,不透明度值和裁剪矩形免胃,并且可以通過簡(jiǎn)單的線性斜坡函數(shù)隨時(shí)間變化。 AVVideoComposition
對(duì)象表示不可變的視頻構(gòu)圖惫撰。 AV Foundation框架還提供了一個(gè)可變的子類AVMutableVideoComposition
羔沙,您可以使用它創(chuàng)建新的視頻。
很有可能使用完全有效的價(jià)值來構(gòu)建復(fù)雜的合成润绎,視頻合成和音頻合成撬碟,從而產(chǎn)生意想不到的效果。 例如莉撇,有效的視頻合成可能產(chǎn)生源視頻軌道的內(nèi)容完全不存在的幀呢蛤。
本文檔討論了構(gòu)建這些問題時(shí)的一些常見缺陷,以及更容易調(diào)試它們的方法棍郎。
Common pitfalls
以下是構(gòu)建復(fù)雜的構(gòu)圖其障,視頻構(gòu)圖和音頻混合時(shí)可能會(huì)遇到的一些常見類型的問題。
1. Compositions
Misaligned track segments - 未對(duì)齊的軌道段
軌道的對(duì)齊可能是錯(cuò)誤的涂佃。 例如励翼,當(dāng)將軌跡插入到特定時(shí)間的組合中時(shí),可能會(huì)發(fā)生CMTime
值舍入誤差的結(jié)果辜荠。
2. Video Compositions, Audio Mixes
Gaps between segments - 各部分之間的間隔
不要在視頻構(gòu)圖中的段之間留下間隙汽抚。 這幾乎肯定會(huì)導(dǎo)致黑框或最后一幀的延續(xù)。
Misaligned layer instructions - 不對(duì)齊層指令
視頻構(gòu)圖時(shí)間范圍與構(gòu)圖軌道段之間可能存在偏差伯病。
Misaligned opacity/audio ramps - 不對(duì)準(zhǔn)的不透明度/音頻斜坡
例如造烁,您可能在其中一個(gè)坡道上犯了錯(cuò)誤,例如過長(zhǎng)時(shí)間午笛。
Bogus layer transforms - 虛構(gòu)層轉(zhuǎn)換
您可能在圖層轉(zhuǎn)換矩陣中有錯(cuò)誤惭蟋。 這可能會(huì)導(dǎo)致輸出超出輸出幀邊界。
Static frame for the entire duration of the source asset - 源資源的整個(gè)持續(xù)時(shí)間的靜態(tài)幀
您可能有一個(gè)視頻構(gòu)圖在源資源的整個(gè)持續(xù)時(shí)間內(nèi)生成單個(gè)靜態(tài)幀药磺。 如果將AVMutableVideoComposition
的frameDuration
設(shè)置為資產(chǎn)的持續(xù)時(shí)間告组,則可能會(huì)發(fā)生這種情況。 在視頻合成器的處理中癌佩,盡管有不同的不透明度木缝,變換等指示便锨,但是在開始時(shí)僅產(chǎn)生一幀,然后“保持”指定的持續(xù)時(shí)間我碟。
Debugging Compositions, Video Compositions and Audio Mixes
1. Visualize the Composition
一種有效的技術(shù)是可視化這些技術(shù)鸿秆。 而不是看你的代碼,你看看你的合成圖片怎囚,視頻構(gòu)圖和音頻混合的圖片。
有為此目的設(shè)計(jì)的示例代碼:
AVCompositionDebugViewer(Mac)
AVCompositionDebugVieweriOS
這些示例應(yīng)用程序?qū)崿F(xiàn)了一個(gè)自定義的AVCompositionDebugView
類桥胞,它提供了形成組合的底層AVComposition恳守,AVVideoComposition和AVAudioMix對(duì)象的視覺描述。 參見下圖贩虾。
只需將AVCompositionDebugView
放入您自己的應(yīng)用程序催烘。 這是一個(gè)非互動(dòng)的視圖。 擴(kuò)展它來繪制您自己的視頻說明缎罢。 它將幫助您發(fā)現(xiàn)組合軌道伊群,視頻說明和音頻組合中的任何重疊和間隙。
后記
未完策精,待續(xù)~~~