天天看點

H.265/HEVC學習筆記之二:碼流分析

一、網絡分層結構VCL和NAL

與H.264/AVC類似,H.265/HEVC采用了視訊編碼層(Video Code Layer,VCL)和網絡适配層(Network Abstract Layer,NAL),VCL層包含了視訊資料的内容,NAL主要負責對視訊壓縮後的資料進行劃分和封裝,保證資料能在不同的網絡環境中傳輸。通過NAL,視訊壓縮資料将被根據其内容特性分割成具有不同特性的NAL單元(NAL Unit,NALU),并對NALU的内容特性進行辨別。是以,傳輸網絡根據NALU的辨別就可以優化視訊傳輸的性能,而不需再分析視訊的内容特征。NALU可以直接作為載體進行傳輸,而由于不同網絡支援的最大傳輸單元(Maximum Transmission Unit,MTU)是不一樣的,是以存在一個網絡分組包含一個或者多個NALU,或者多個網絡分組包含一個NALU。

//對于一個碼流檔案來說,包含一系列NAL頭,根據H.265對NALU的類型定義,可以解析出其是VPS、SPS、PPS等六種類型

二、網絡适配層單元NALU

NAL根據視訊壓縮資料的特性将其封裝為不同的NALU,NALU除了承載VPS、SPS、PPS等資訊,還有視訊片(Slice)的壓縮資料,承載視訊片壓縮資料的NALU被稱為VCLU(VCL NALU),承載其它資訊的壓縮資料的NALU則被稱為non-VCLU(non-VCL NALU)。H.265/HEVC下NALU包含兩部分的結構:NALU頭(Header)和負載(Payload),NALU頭長度為固定的兩個位元組,反映NALU的内容特征,NALU負載長度為整數位元組,承載視訊壓縮後的原始位元組序列載荷(Raw Byte Sequence Payload,RBSP)。RBSP是對視訊編碼後的原始比特流片段SODB(STring OF Data Bits)進行添加尾部(添加結尾比特1,以湊足整位元組)的包裝。

RBSP可以包含一個SS的壓縮資料,VPS、SPS、PPS、補充增強資訊等,也可以為定界、序列結束、比特流結束、填充資料等。【P277】在位元組流環境中,如果NALU對應的Slice為一幀的開始,則其開始碼為0x00000001,若對應的Slice不是一幀的開始,則為0x000001。為避免NALU載荷中的位元組流片段與的NALU的起始碼及結束碼發生沖突,需要對RBSP位元組流做避免沖突處理,經過處理後的RBSP才可以直接作為NALU的載荷資訊。同時注意到在解碼的時候,這些處理是會被逆處理恢複的。

NALU的結構圖(fig1)

NALU文法表(tab1)

NALU頭文法(tab2)

三、視訊比特流中的NALU

壓縮視訊比特流是由連續排列的NALU組成的,其順序和解碼順序是一緻的。H.265/HEVC引入了接入單元(Access Unit,AU)的概念,将其定義為多個按解碼順序排列的NALU,且這些NALU的解碼能生成一個圖像。是以也可認為壓縮視訊比特流是由按順序排列的AU組成的,可将AU看成壓縮視訊比特流的基本機關。

參考:

完成一個H.265/HEVC碼流分析工具

視音頻編解碼學習工程:H.264分析器

繼續閱讀