前言
最近新加入的公司在嵌入式音視頻方面算是全國領先水平,因而在完成自己本職的工作的時候有必要在這一方面做一系列的提升,以跟上其他同事的世界,不光光只支持BSP的能力,在我看來也是需要將視頻流作爲自己的增長點了。
聲音的物理性質
聲音是由物體振動而產生的,它是一種壓力波,使周圍的空氣產生書迷變化,形成疏密相間的縱波(可以想象成石頭落入水中激起來的波紋)
聲音的三要素
頻率、振幅和波形,這是物理意義上的說法,生活中,音階的高低其實是頻率,響度代表振幅,音色代表波形,一般來講,生活中經常用分貝來描述響度,當聲音超過一定分貝會受不了。音色也好理解,就是當你聽鋼琴與小提琴的時候,能很容易分辨,因爲它的音色不同。
人的耳朵也是有一定的頻率範圍的,大約爲20hz~20khz。注意一般超過90dB就會損害人耳。
回聲
我們在高山活着空曠地帶高聲大喊的時候,經常能夠聽到回聲。回聲的調節是兩個是聲音傳到我的耳朵裏面要大於80毫秒
共鳴
就是聲音進行了傳導,如雙音叉實驗。
數字音頻
如何產生數字音頻呢?就是將模擬信號轉化成數字信號,主要要經歷採樣、量化和編碼。所謂採樣呢,就是在時間軸上對信號進行數據化,然後進行量化,何爲量化就是在幅度上對信號進行數字化,最後進行編碼,即按照一定的格式記錄採樣和量化後的數字數據,而裸數據就是脈衝編碼調製數據(PCM)
PCM的概念
-
量化格式(位深度)又稱之爲比特率
-
採樣率
-
聲道數
1B = 8b 即1個字節相當與8位
音頻編碼
爲何要編碼? 要是直接採用PCM方式,那麼採樣所得的數據將非常龐大,那麼這個數據能夠在網上流傳嗎?顯然你要是這麼幹了,聽首歌都要600多MB,要被人罵死的,於是就要進行壓縮。
壓縮又分爲有損壓縮與無損壓縮,無損壓縮是指壓縮後的數據可以完全恢復,有損則就是不可完全恢復。壓縮實際上就是壓縮掉冗餘信號,那麼我們人耳聽覺範圍之外的音頻信號就是冗餘信息。
WAV編碼
PCM(脈衝編碼調製),而wav編碼就是在pcm數據格式前面加44字節,分別用來描述PCM的採樣率、聲道數、數據格式等信息,特點:音質非常好,大量軟件都支持
mp3編碼
使用LAME編碼的中高碼率,聽起來非常接近wav特點:音質在128Kbit/s以上變現還不錯,壓縮比都比較高,兼容性強
acc編碼
這是新一代的音頻有損壓縮技術,特點:在小於128Kbit/s下的碼率表現優異,多用做視頻中的音頻軌的編碼
ogg編碼
ogg編碼完全免費,只是受支持不好。特點:兼容性差,流媒體基本不支持
視頻圖像
前面我們已經說了音頻相關的知識,下面我們要討論視頻的基礎知識,那麼我們所見到的白光是咋麼構成的呢?就要說到三原色了,紅(r)綠(g)藍(b)。
手機分辨率
我們最長見的一般都是手機分辨率1280*720,那麼這個是什麼意思呢?其實很簡單就是水平方向有720個像素點,垂直方向有1280個像素點,而每個像素點都是由三個子像素點組成的,而這3個像素點就是rgb啊
圖像表達
現在我們知道了任何一個圖像都可以由RGB組成,那麼RGB應該是如何表示的呢?
-
浮點表示:取值範圍爲0.0~1.0之間
-
整數表示:取值範圍在0~255或者00~FF之間 這就有點類似於某些平臺上表示圖像格式的RGBA_8888,還有像android平臺的RGB_565的表示方式,5比特表示R,6比特表示G,5比特表示B
然而在視頻幀中的裸數據更多的是YUV數據格式表示的。它主要用於優化彩色視頻信號的傳輸,並使其能夠向老式黑白電視兼容,與RGB相比,其最大的優點在於只需要佔用極少的頻寬。“Y”表示明亮度,亦稱灰階數,而“U”和“V”表示的則是色度,描述了影像的色彩以及飽和度,用於指定像素的顏色,色度其實定義了顏色的兩個方面-色調與飽和度,之所以用YUV色彩空間,是因爲它的亮度信號Y與色度信號U、V是分離的。
YUV與RGB是可以通過公式進行轉換的,在這裏不具體敘說了,自行百度吧。(而且我們也不需要真的關注他,這裏一般顯示輸出已經幫我們解決了)
視頻編碼
與音頻編碼相同,視頻壓縮也是通過對冗餘信號進行壓縮,包含時間與空間上的冗餘信息。主要去除的冗餘信息有
-
運動補償
-
運動表示
-
運動估計
編碼概念
IPB幀:每幀都代表着一副靜止的畫面,在進行壓縮的過程中,採用算法減少數據的容量,其中IPB就是一種。具體不展開說了,這個概念很大,不如大家自行百度,可能得到的信息更加詳細。還有DTS主要用於解碼,這裏還有GOP的概念就是兩個I幀之間的圖片就是GOP。