編碼層次
- 視頻編碼層:預測、變換、量化、熵編碼等操作
- slice層:將視頻幀分割成若干個編碼單元,包含一定數量的宏塊,提高編解碼的并行性和容錯性。
- NAL層:提升對網絡傳輸和數據存儲的親和性
視頻編碼層
- 基準-Baseline Profile:主要用于視頻會議、可視電話等實時通信領域;支持IP幀,熵編碼支持 CAVLC 算法
- 主要-Main Profile:主要用于數字電視廣播、數字視頻數據存儲等;支持視頻場編碼、IPB幀。熵編碼支持 CAVLC 和 CABAC
- 擴展-Extended Profile:主要用于網絡視頻直播和點播等;支持基準所有特性,支持 SI 和 SP 條帶
編碼的概念
- 序列:一組變化不大的圖像
- 幀:一個視頻圖像編碼后的數據,一幀由一片或多片組成、一片由多個宏塊組成。宏塊是編碼的基本單位
- GOP:圖像組,類似與序列
- IDR:立即刷新幀,一定是 I幀,清空參考幀緩沖區
分層結構
-
SODB:視頻編碼層輸出編碼的數據后,經過數據劃分,輸出 SODB(String of Data Bits)數據比特串
-
RBSP:NAL層 將 SODB 打包成 RBSP (Raw Byte Sequence Payload)原始字節序列負載,在SODB 后面添加1和若干0字節對齊
-
EBSP:Encapsulated Byte Sequence Payload, 擴展字節序列載荷,RBSP加上NAL頭就是一個NALU 單元,起始碼 三字節的 0x000001 或 四字節的 0x00000001。access unit ,pps,sps 是 四字節。
-
NALU結束是三字節的 0x000000,防止數據中間出現0x000000,中間每遇到兩個0x00就插入一個0x03
- -
NAL頭:8位
- F(forbiden)禁止位 0:為1時語法錯誤
- NRI 參考級別 1-2:值越大,越重要
- TYPE Nal 單元數據類型 3-7:數據類型
參數集
SPS-序列參數集
- profile信息,baseline,main,extended
- 碼流level,不同的level定義了最大分辨率,最大幀率,最大碼率,1080P30FPS20Mbps是 Level4.0
- 色彩空間
- 碼率控制參數
- 熵編碼參數
PPS-圖像參數集
- 圖像類型:IPB
- 參考幀選擇
- 解碼器配置
- 參數集索引
ES-Elementary Streams(原始流)
- 包含視頻和音頻
- 視頻是 NALU
- 音頻則是音頻幀
- 只含視頻或音頻
- 由若干個 AU(Access Unit)組成
PES-Packetized Elementary Streams(分組的 ES)
- ES流經過PES打包器形成的數據流,將ES流分組,打包,加入包頭信息
PTS PresentationTime Stamp(顯示時間標記)、DTS Decoding Time Stamp(解碼時間標記)
- 打包在PES包頭內
- 解決音視頻同步顯示
- 防止解碼器輸入緩存上溢或下溢
- 每個 IPB 幀包頭都有一個 pts dts
- B幀可以不標記 dts,因為通常同時參考前后兩幀
- B幀的解碼順序和顯示順序可能不同
PS Program Stream(節目流)
- 由若干個 PES 包組成
- 包含同步信息和時鐘恢復信息
- 最多可包含同一時間基準的16個視頻PES和32個音頻PES包
- 可變長度的
- 信道環境較好,傳輸誤碼率較低時使用PS碼流
TS Transport Stream(傳輸流)
- 定長的 TS 包組成 188 字節,或加上16字節的 CRC 校驗數據
- 是對 PES 包的重新封裝
- 信道環境較為惡劣、傳輸誤碼率較高時使用TS碼流
- 頭 四字節,負載 184字節
PAT 表,PMT 表
- 通常只用于數字電視,實際網絡傳輸用不到