1. 程式人生 > >從零開始學習音視訊程式設計技術--編碼詳解

從零開始學習音視訊程式設計技術--編碼詳解

現在音視訊如此火爆,作為一枚專業的程式媛哪能不懂音視訊的開發呢,所以踏上了音視訊研究之路。對於ios來說音視訊編解碼主要有兩種編解碼框架FFmpeg和蘋果ios8以後開放的VideoToolBox,FFmpeg是基於CPU進行編解碼的,俗稱軟編碼,而VideoToolBox是基於GPU進行編解碼的,俗稱硬編碼。這裡我主要研究的是蘋果開放的VideoToolBox。天小編給大家帶來音視訊

為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的iOS交流群:687528266,點選連結加入群聊【iOS軟體開發學習交流】:https://jq.qq.com/?_wv=1027&k=5wrTEZx

不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!
專業術語
1.低位元速率(Low Bit Rate):和MPEG2和MPEG4 ASP等壓縮技術相比,在同等影象質量下,採用H.264技術壓縮的資料量只有MPEG2的1/8 、MPEG4的1/3。

2.高質量的影象: H.264能提供連續、流暢的高質量影象(DVD質量)

3.容錯能力強: H.264提供瞭解決在不穩定網路下容易發生丟包等錯誤的必要工具。

4.網路適應能力強: H.264提供了網路抽象層(Network Abstraction Layer),使得H.264的檔案能容易地在不同的網路上傳輸(例如網際網路、CDMA、GPRS、WCDMA、CDMA2000等)。

5.高壓縮率,H.264的壓縮比達到驚人的102:1。

一.音訊基礎複習

1.1 聲音的產生

相對於視訊,可觀察這個現象.音訊在學習過程,就缺乏了想象的空間.但是如果從原理出發,就不會那麼難了.

聲音是什麼?

聲音是波,靠物體的振動產生
1.2 聲波的3要素

聲波的三要素,是頻率,振幅,波形.頻率代表音階的高低,振幅代表響度,波形則代表音色.

頻率越高,波長就會越短.而低頻聲響的波長則較長.所以這樣的聲音更容易繞過障礙物,能量衰減就越小.聲音就會傳播的越遠.
響度,就是能量大小的反饋.用不同的力度敲打桌面,聲音的大小勢必發生變換.在生活中,我們用分貝描述聲音的響度.

聲音分貝參考圖
==小貼士==

分貝(decibel),是度量聲音的強度單位,常用dB表示.是由美國發明家亞歷山大.格雷厄姆.貝爾 名字命名的.長期在夜晚接受50 分貝的噪音, 容易導致心血管疾病; 55 分貝, 會對兒童學習產生負面影響; 60分貝, 讓人從睡夢中驚醒; 70 分貝,心肌梗死的發病率增加30%左右; 超過110 分貝, 可能導致永久性聽力損傷.

音色,在同樣的頻率和響度下,不同的物體發出的聲音不一樣.比如鋼琴和古箏聲音就完全不同.波形的形狀決定了聲音的音色.因為不同的介質所產生的波形不同.就會產生不一樣的音色.
1.3 聲音傳播

聲音的發生,來源於振動.人類說話,從聲帶振動發生聲音之後,經過口腔,顱腔等區域性區域的反射,在經過空氣傳播到別人耳朵中.這是我們說話到聽到的過程.
聲音的傳播,可以通過空氣,液體,固定傳播.介質不同,會影響聲音的傳播速度.
吸音棉:通過聲音反射而產生的嘈雜感,吸音材料選擇使用可以衰減入射音源的反射能量,從而對原有聲音的保真效果.比如錄音棚牆壁上就會使用吸音材質
隔音:主要解決聲音穿透而降低主體空間的吵鬧感,隔音棉材質可以衰減入射聲音的透射能量.從而達到主體空間安靜狀態,比如KTV牆壁上就會安裝隔音棉材料.
二.數字音訊

2.1 模擬訊號數字化過程

將模擬訊號轉換為數字訊號的過程,分別是取樣,量化和編碼.

音訊取樣

對模型訊號進行取樣,取樣可以理解為在時間軸上對訊號進行數字化.

而,根據奈斯特定理(取樣定理),按比聲音最高頻率高2倍以上的頻率對聲音進行取樣.這個過程稱為AD轉換.

比如,前面提到高質量音訊訊號,其頻率範圍是20Hz-20KHz.所以取樣頻率一般是44.1KHz.這樣可以保證取樣聲音達到20KHz也能被數字化.而且經過數字化處理後的聲音,音質也不會降低.44.1KHZ,指的是1秒會取樣44100次

奈斯特定理(取樣定理) 資料

量化

量化,指的是在幅度軸上對訊號進行數字化.簡單的說,就是聲音波形的資料是多少位的二進位制資料,通常用bit做單位.比如16位元的二進位制訊號來表示聲音的一個取樣.它的取值範圍[-32768,32767].一共有65536個值.如16bit、24bit。16bit量化級記錄聲音的資料是用16位的二進位制數,因此,量化級也是數字聲音質量的重要指標。我們形容數字聲音的質量,通常就描述為24bit(量化級)、48KHz取樣,比如標準CD音樂的質量就是16bit、44.1KHz取樣.

聲音量化

既然每個量化都是一個取樣,那麼聲音這麼多采樣,該如何將這些資料儲存起來?

三.編碼

3.1 什麼叫編碼?

按照一定格式記錄取樣和量化後的資料.

音訊編碼的格式有很多種,而通常所說的音訊裸資料指的是脈衝編碼調製(PCM)資料.

如果想要描述一份PCM資料,需要從如下幾個方向出發:

量化格式(sampleFormat)

取樣率(sampleRate)

聲道數(channel)
3.2 編碼篇

這裡我主要是對我學習視訊編碼做一個整理記錄,技巧只有一個就是多看多寫,不懂就查:

必須全都看一遍這樣對視訊編解碼有了一個大概的瞭解,還有對一些關鍵字的瞭解 碼流 / 位元速率 / 位元率 / 幀速率 / 解析度 / 高清的區別

掌握了一定的基礎知識後 就是理論結合實際啦,程式碼連結地址音視訊編解碼程式碼
以上都是純理論只是現在進入真正的程式碼解析根據部落格