開發相親交友原始碼,需要熟練掌握的音視訊基礎知識

雲豹科技程式設計師發表於2021-12-10

流程圖解

相親交友原始碼中音視訊完整解碼播放流程分析。
在這裡插入圖片描述
相親交友原始碼中音視訊錄製流程

在這裡插入圖片描述

編碼

為什麼要編碼?

因為視訊檔案太大了

相親交友原始碼中的視訊是連續的影像序列,由連續的幀構成,一幀即為一幅影像。 由於人眼的視覺暫留效應,當幀序列以一定的速率播放時,我們看到的就是動作連續的視訊。 這麼多連續的影像資料如果不經過編碼的資料量太大了。
比如一個1920x1080解析度,32位,每秒30幀的視訊,一秒鐘需要1920108032*30,大小大概為237MB 資料。

編碼的目的:

編碼的目的,就是為了壓縮。相親交友原始碼中各種視訊編碼方式,都是為了讓視訊變得體積更小,有利於儲存和傳輸。編碼的 核心思想就是去除冗餘資訊。

冗餘型別:

空間冗餘 == 相鄰畫素重複:

空間冗餘:相親交友原始碼中影像內部相鄰畫素之間存在較強的相關性多造成的冗餘。

時間冗餘 == 幀之間差值:

時間冗餘:視訊影像序列中的不同幀之間的相關性所造成的冗餘。

視覺冗餘 == 人類不敏感的顏色

視覺冗餘:是指人眼不能感知或不敏感的那部分影像資訊。

資訊熵冗餘 ==熵編碼-哈夫曼演算法

資訊熵冗餘:也稱編碼冗餘,人們用於表達某一資訊所需要的位元數總比理論上表示該資訊所需要的最少位元 數要大,它們之間的差距就是資訊熵冗餘,或稱編碼冗餘。

知識冗餘 == 人類(頭 身體 腿),汽車,房子 不需要記錄

知識冗餘:是指在相親交友原始碼中有些影像中還包含與某些驗證知識有關的資訊。

I幀 P幀 B幀 壓縮思路

I幀:幀內編碼幀,關鍵幀,I幀可以看作一個影像經過壓縮之後的產物,可以單獨解碼出一個完整的影像; (壓縮率最低)
P幀:前向預測/參考 編碼幀,記錄了本幀跟之前的一個關鍵幀(或P幀)的差別,在相親交友原始碼中解碼時需要用之前快取的畫 面疊加上本幀定義的差別,生成最終畫面。 (壓縮率比I幀高,比B幀低 屬於 適中情況)
B幀:雙向預測/參考 編碼幀,記錄了本幀與前後幀的差別,解碼需要參考前面一個I幀或者P幀,同時也需要 後面的P幀才能解碼一張完整的影像。 (參考前後的預測得到的,壓縮率是最高,但是耗時)

H.264進位制資料分析

編碼標準:
H.264 == MPEG-4 - AVC
HEVC == H.265 [H.264基礎上 加入了更多的演算法 == 壓縮的更小]

視訊編碼就是通過特定的壓縮技術,將某個視訊格式檔案 轉換成另外一種視訊格式檔案。
視訊流傳輸中最重要的編解碼標準有以下兩個標準:

國際電聯(ITU-T,國際電信聯盟)的H.261,H.263,H.264,H.265等。
ISO國際標準化組織與IEC國際電子委員會於1988年聯合成立 MPEG系列標準MPEG1,MPEG2,MPEG4 ,AVC等。

兩者為合作關係:ITU-T方面稱之為H.26。但ISO/IEC的則將這個新標準歸納於MPEG系列,稱之為MPEG-4 AVC。
而H.265則被視為是ITU-T H.264/MPEG-4 AVC 標準的繼承者,又稱之為高效率編碼(Hight Efficiengcy Video Coding)。

H.264分層結構(VCL與NAL)

VCL:

VCL(Video Coding Layer,視訊編碼層):負責相親交友原始碼高效的視訊內容表示,
VCL資料即編碼處理的輸出,它表示被壓縮編碼後的視訊資料序列。

NAL:

NAL(Network Abstraction Layer,網路提取層):負責以網路所要求的恰當的方式對資料進行打包和 傳送,
是傳輸層。不管在本地播放還是網路播放,都要通過這一層來傳輸

VCL就是被壓縮編碼後原始資料,在VCL資料封裝到NAL單元中之後,才可以用於傳輸或儲存。

在這裡插入圖片描述
NAL(片(巨集塊))

相親交友原始碼中的一幀圖片經過 H.264 編碼器之後,NAL單元就是裝載著這些片(被編碼為一個或多個片 slice), 每片包 含整數個巨集塊(至少一個巨集塊,最多包含整個影像巨集塊)。
在這裡插入圖片描述
一般H.264編碼器的預設輸出為:起始碼+NALU(Nal單元)。起始碼為:0x00000001或者0x000001。
一個NALU(PPS, I幀,B幀,P幀)
每個NALU 包含(起始碼 與 1個位元組的Nal Header 與 若干整數字節的負荷資料EBSP構成)

為什麼需求起始碼,0x00000001或者0x000001 ?

因為每一個NALU都需要分隔,要分隔幀操作,就相對於寫文章斷句一樣

為什麼 0x00000001或者0x000001, 兩種起始碼 ?

0x00000001 起始碼代表:一個NALU裡面有很多片。
0x000001 起始碼代表: 一個NALU裡面一個片可以搞定。

NAL型別查詢表:
在這裡插入圖片描述
H.264分析

通過EditorGreen 可以分析H.264資料

SPS序列引數集,記錄有多少I幀,多少B幀,多少P幀,幀排列等
PPS 影像引數集(影像寬高資訊等)
SEI補充資訊單元(可以記錄座標資訊,人員資訊, 後面解碼的時候,可以通過程式碼獲取此資訊)
真正開發中只分析:SPS序列引數集,PPS影像引數集 ,I幀
在這裡插入圖片描述
00 00 00 01 67
00 00 00 01 是起始碼, 67 是一個位元組(16進位制) 需要轉成二進位制 01100111
二進位制01100111 取低五位,00111
一個位元組八位,前面補0 , 00000111 ,轉成十六進位制 0x07 ,查表NAL型別表,是序列引數集

為什麼要取低五位?

NALU中的位元組 01100111,分為三組
0 11 001111
每組代表不同意義:
第一組:0 代表這個幀可以用,1代表這個幀不可以用
第二組:11 代表此幀很重要 , 00 代表此幀不重要
第三組:00111 ,是為了查詢NALU型別 , 轉成16進位制 是7,通過查表 得知 是 SPS
PPS 影像引數集

00 00 00 01 68, 0x68 -> 2進位制01101000 -> 取低五位 00001000 —> 十六進位制 0x08

I幀

00 00 00 65, 0x65 —> 2進位制01100101—> 取低五位00000101 —> —> 十六進位制 0x06 最終是 5

PTS與DTS

DTS表示解碼時間戳,相親交友原始碼在什麼時候解碼這一幀的資料 ;
PTS表示顯示時間戳 ,在什麼時候顯示這一幀。
在沒有B幀的情況下,DTS和PTS的輸出順序是一樣的。
因為B幀打亂了相親交友原始碼解碼和顯示的順序(要解碼B幀需要先解碼後面的P幀),所以一旦存在B幀,PTS和DTS就會不 同。

在這裡插入圖片描述
I幀 PBPBPBPPB I幀 ==GOP

從第一個I幀 到 下一個I幀,這樣分為一組

SPS PPS I P B P B P B P B I 一組

SPS PPS I P B P B P B P B I 二組

這樣一組一組播放才會效率高

本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2847022/,如需轉載,請註明出處,否則將追究法律責任。

相關文章