目錄
1.HEVC的Profiles(檔次),Levels(級別),Tier(層)
2.2.2 VCL-NALU和non VCL-NALU具體類型如下:
1.HEVC的Profiles(檔次),Levels(級別),Tier(層)
1.1 HEVC的Profiles(檔次)
Profile(檔次)規定了編碼器可採用哪些編碼工具(coding tools)或算法,共三個檔次如下:
(1)"Main" profile: 每像素8bit的位深,是最常見的檔次。
(2)"Main Still Picture" profile:
支持單個靜態圖像,按照Main檔次的規定進行編碼,Bitstream contains only a single(intra) picture
Includes all(intra) coding features of Main profile
(3)"Main 10" profile:
除了8bit位深,也可擴展支持10bit位深。支持Main 10的解碼器必須同時可解碼Main檔次的碼流。
1.2 HEVC Levels(級別)和Tiers(層)
level(級別)是對解碼端的負載和內存佔用影響較大的一系列編碼約束的組合,如最大采樣率,最大圖像尺寸,最小壓縮率,最大比特率,DPB容量和CPB(解碼緩衝區)大小等。
Tier(層)是爲了不同應用需要的最高比特率的不同做出區分,有main和high兩種。
標準規定HEVC有13個level(級別)和2個Tier(層):
2.HEVC的分層結構
2.1 分層結構概述
與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。
上圖中的Network Abstraction Layer屬於其他協議定義的內容。VCL可認爲是視頻編碼後的裸碼流,NAL是將VCL裸碼流進行打包後進行網絡傳輸的碼流。
2.2 VCL
VCL採用了把圖片內靜態壓縮、圖片間的動態壓縮、2D變換,以及碼流層的熵壓縮等壓縮技術組合在一起的混合編碼技術,其編碼框架如下圖所示:
和H.254/AVC相比,H.265/HEVC採用了許多新的編碼方法,如下表所示:
|
HEVC/H.265 |
AVC/H.264 |
Year Other Name Resolutions |
2013 MPEG-H Up to 8K |
2003 MPEG-4 Part 10 Up to 4K |
Profiles |
3 profiles; 13 levels; 2 tiers |
21 profiles; 17 levels |
Block size |
Tree structure 8x8,16x16,32x32,64x64 Square, sym./asym. rect. |
Macroblock 16x16(4x4) Square, sym. rect. |
Transforms |
Integer-DCT (4x4,8x8,16x16,32x32) Integer-DST (4x4 Intra) |
Integer-DCT (4x4,8x8) Hadamard (2x3,4x4 ) |
Intra-prediction |
Up to 33 angular modes (+DC+planar mode) |
Up to 9 modes |
Motion prediction Motion-copy mode MV precision |
Advanced MV prediction (spatial+temp. co-located) Merge, Skip 1/4 pixel 7/8 tap |
Spatial mediam +temp. co-located Direct, Skip 1/2 pixel 6-tap + 1/4 pixel bilinear |
In-loop filtering |
Deblocking, SAO |
deblocking |
Quantization Entropy Coding |
URQ CABAC |
URQ CAVLC, CABAC |
2.2 NAL
HEVC碼流是由一系列NAL unit(NALU)組成,每個NAL包含整數字節的數據,頭兩個字節爲NAL unit Header(1 byte in H.264),剩餘的爲負載數據(原始字節序列負荷RBSP)。不同的NAL單元分爲VCL NAL和non VCL NAL單元,前者攜帶編碼過的圖像數據,後者包含多幀共享的控制參數信息。
2.2.1 NAL unit 頭包含的信息:
- 第一bit‘F’爲forbidden−zero位,固定爲0
- 6-bits NALType確定NAL的類型,其中VCL NAL和non-VCL NAL各有32類
- LayerID表示NAL所在的Access unit所屬的層,該字段是爲了HEVC的繼續擴展設置
- TID(temporal identifier),確定了NAL所在的unit的時域上的層次,如下圖:對於a、b而言,虛線下TID都是0,虛線上TID都是1。同一picture內的NAL,TID字段內容相同,作用:TID小的NAL不能依賴TID大的NAL,還可用於控制視頻選擇部分幀播放。
2.2.2 VCL-NALU和non VCL-NALU具體類型如下:
2.2.3 NALU Payload
- NALU負載長度爲整數字節,承載視頻壓縮後的原始字節序列載荷(Raw Byte Sequence Payload,RBSP)。
- RBSP是對視頻編碼後的原始比特流片段SODB(STring OF Data Bits)進行添加尾部(添加結尾比特1,以湊足整字節)的包裝。
- RBSP可以包含一個SS的壓縮數據,VPS、SPS、PPS、補充增強信息等,也可以爲定界、序列結束、比特流結束、填充數據等。
- 在字節流環境中,如果NALU對應的Slice爲一幀的開始,則其開始碼爲0x00000001,若對應的Slice不是一幀的開始,則爲0x000001。
- 爲避免NALU載荷中的字節流片段與的NALU的起始碼及結束碼發生衝突,需要對RBSP字節流做避免衝突處理,經過處理後的RBSP纔可以直接作爲NALU的載荷信息。同時注意到在解碼的時候,這些處理是會被逆處理恢復的。
下面是H.264/AVC的NALU sequence的一個示意圖:
本博客所有文章均同步發表於www.mx1980.cn/blog