音視頻開發基礎知識整理

術語:

容器(Container):容器就是一種文件格式,比如flv,mkv等。包含下面5種流以及文件頭信息。

流(Stream):是一種視頻數據信息的傳輸方式,5種流:音頻,視頻,字幕,附件,數據。

幀(Frame):幀代表一幅靜止的圖像,分爲I幀,P幀,B幀。(下文介紹)

編解碼器(Codec):是對視頻進行壓縮或者解壓縮的工具。

複用(mux):把不同的流按照某種容器的規則放入容器。

解複用(demux):把不同的流從某種容器中解析出來。

 

視頻編碼方式

硬編碼:使用非CPU進行編碼,如顯卡GPU、專用的DSP、FPGA、ASIC芯片等

軟編碼:使用CPU進行編碼,軟編碼通常使用:ffmpeg+x264

 

編碼的流程:

採集--> 獲取到視頻幀--> 對視頻幀進行編碼 --> 獲取到視頻幀信息 --> 將編碼後的數據以NALU方式寫入到文件

 

視頻編碼協議:

H. 264:低碼率,高質量,高容錯 。(編碼單位固定16*16)開源實現:ffmpeg、openh264、x264。

H. 265:能達到H.264兩倍之壓縮率,可支持4k分辨率,最高到8k。(編碼單位8*8-64*64)開源實現:ffmpeg、libde265、x265。

二者比較:H.265更爲先進,同樣畫質的情況下,265理論存儲空間節省50%,同樣碼率下,265理論畫質提高30%-40%。

 

視頻編解碼開源實現:

ffmpeg:是一套開源的、用於對音視頻進行編碼&解碼&轉化計算機程序

x264:x264是一種免費的、開源的、具有更優秀算法的H.264/MPEG-4 AVC視頻壓縮編碼方式

 

視頻單位:

幀率:每秒鐘多少幀畫面

碼率:單位時間內保存的數據量

GOP:group of pictures 一組I幀爲首的序列,後面跟着P幀或B幀。

GOP Size:兩個I幀之間的間隔,例如:GOP爲120,如果是720p 幀率60 的話,那就是2s一次I幀. 

 

視頻編碼中的幀:

I幀:表示關鍵幀,你可以理解爲這一幀畫面的完整保留;解碼時只需要本幀數據就可以完成(因爲包含完整畫面)

P幀:表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據)

B幀:是雙向差別幀,也就是B幀記錄的是本幀與前後幀的差別(具體比較複雜,有4種情況),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面,通過前後畫面的與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累~。

 

DTS和PTS:

DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在於告訴播放器該在什麼時候解碼這一幀的數據。

PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什麼時候顯示這一幀的數據。

 

圖像存儲格式:

RGB:使用紅、綠、藍三原色的亮度來定量表示顏色。

BGR:與RGB一樣,B與R對調。

 

YUV:Y表示亮度,CbCr表示顏色。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章