版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2017.08.30 |
前言
AVFoundation框架是ios中很重要的框架,所有與視頻音頻相關(guān)的軟硬件控制都在這個(gè)框架里面,接下來(lái)這幾篇就主要對(duì)這個(gè)框架進(jìn)行介紹和講解。感興趣的可以看我上幾篇。
1. AVFoundation框架解析(一)—— 基本概覽
2. AVFoundation框架解析(二)—— 實(shí)現(xiàn)視頻預(yù)覽錄制保存到相冊(cè)
3. AVFoundation框架解析(三)—— 幾個(gè)關(guān)鍵問(wèn)題之關(guān)于框架的深度概括
4. AVFoundation框架解析(四)—— 幾個(gè)關(guān)鍵問(wèn)題之AVFoundation探索(一)
5. AVFoundation框架解析(五)—— 幾個(gè)關(guān)鍵問(wèn)題之AVFoundation探索(二)
6. AVFoundation框架解析(六)—— 視頻音頻的合成(一)
Introduction
AVFoundation框架提供了一組功能豐富的類,以便于編輯音視頻資源。 AVFoundation的編輯API的核心是由AVComposition對(duì)象定義的組合。 組合僅僅是來(lái)自一個(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è)視頻源指定空間變換,不透明度值和裁剪矩形,并且可以通過(guò)簡(jiǎn)單的線性斜坡函數(shù)隨時(shí)間變化。 AVVideoComposition對(duì)象表示不可變的視頻構(gòu)圖。 AV Foundation框架還提供了一個(gè)可變的子類AVMutableVideoComposition,您可以使用它創(chuàng)建新的視頻。
很有可能使用完全有效的價(jià)值來(lái)構(gòu)建復(fù)雜的合成,視頻合成和音頻合成,從而產(chǎn)生意想不到的效果。 例如,有效的視頻合成可能產(chǎn)生源視頻軌道的內(nèi)容完全不存在的幀。
本文檔討論了構(gòu)建這些問(wèn)題時(shí)的一些常見(jiàn)缺陷,以及更容易調(diào)試它們的方法。
Common pitfalls
以下是構(gòu)建復(fù)雜的構(gòu)圖,視頻構(gòu)圖和音頻混合時(shí)可能會(huì)遇到的一些常見(jiàn)類型的問(wèn)題。
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ò)誤,例如過(guò)長(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ā)生這種情況。 在視頻合成器的處理中,盡管有不同的不透明度,變換等指示,但是在開(kāi)始時(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ì)象的視覺(jué)描述。 參見(jiàn)下圖。
只需將AVCompositionDebugView放入您自己的應(yīng)用程序。 這是一個(gè)非互動(dòng)的視圖。 擴(kuò)展它來(lái)繪制您自己的視頻說(shuō)明。 它將幫助您發(fā)現(xiàn)組合軌道,視頻說(shuō)明和音頻組合中的任何重疊和間隙。

后記
未完,待續(xù)~~~
