H.264中的NAL單元類型 nal_unit_type

nal_unit_type
NAL 單元和 RBSP 語法結構的內容
 
0 未指定  
1 一個非IDR圖像的編碼條帶
slice_layer_without_partitioning_rbsp( )
 
2 編碼條帶數據分割塊A
slice_data_partition_a_layer_rbsp( )
 
3 編碼條帶數據分割塊B
slice_data_partition_b_layer_rbsp( )
 
4 編碼條帶數據分割塊C
slice_data_partition_c_layer_rbsp( )
 
5 IDR圖像的編碼條帶
slice_layer_without_partitioning_rbsp( )
 
6 輔助增強信息 (SEI)
sei_rbsp( )
 
7 序列參數集
seq_parameter_set_rbsp( )
 
8 圖像參數集
pic_parameter_set_rbsp( )
 
9 訪問單元分隔符
access_unit_delimiter_rbsp( )
 
10 序列結尾
end_of_seq_rbsp( )
 
11 流結尾
end_of_stream_rbsp( )
 
12 填充數據
filler_data_rbsp( )
 
13 序列參數集擴展
seq_parameter_set_extension_rbsp( )
 
14...18 保留  
19 未分割的輔助編碼圖像的編碼條帶
slice_layer_without_partitioning_rbsp( )
 
20...23 保留  
24...31 未指定  


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


________________________________________________________________________________________

下表是H.264標準中定義所有NAL的類型
#define NALU_TYPE_SLICE 1
#define NALU_TYPE_DPA 2
#define NALU_TYPE_DPB 3
#define NALU_TYPE_DPC 4
#define NALU_TYPE_IDR 5
#define NALU_TYPE_SEI 6
#define NALU_TYPE_SPS 7
#define NALU_TYPE_PPS 8
#define NALU_TYPE_AUD 9
#define NALU_TYPE_EOSEQ 10
#define NALU_TYPE_EOSTREAM 11
#define NALU_TYPE_FILL 12


因此當nal_unit_type值為7時,則這個NAL unit即為SPS。而值為8時,這個NAL unit為PPS。


________________________________________________________________________________________

nal_unit:
{
  forbidden_zero_bit      (1 bit)
  nal_ref_idc                   (2 bits)
  nal_unit_type               (5 bits)
  RBSP(Raw Byte Sequence Payloads)
}


舉例來說,若擷取某一段H.264 bitstream為00 00 00 01 67 42 e0 14 da 05 82 51。
因為67 = 0 11 00111,nal_unit_tye = 00111 = 7,所以這一段為SPS。
又另一例00 00 00 01 68 ce 30 c4 80 00 00 00 00 00 00 00
68 = 01000,nal_unit_tye = 01000 = 8,所以這一段為PPS。

forbidden_zero_bit==0
nal_ref_idc  :不等於0 時,規定NAL 單元的內容包含一個序列參數集,或一個圖像參數集,或一個參考圖像條帶,或一個參考圖像的條帶數據分割。
nal_unit_type :是指包含在NAL 單元中的RBSP 數據結構的類型,VCL NAL 單元是指那些 nal_unit_type值等於1到5(包括1和5)的NAL單元。所有其他的NAL單元都稱作非VCL NAL單元


當一個編碼圖像條帶NAL 單元的nal_unit_type 值等於5 時,編碼的同一圖像其他所有的VCL NAL 單元的
nal_unit_type值都應該爲5。這樣的圖像稱作IDR圖像。
注 :— 條帶數據分割不可以用於IDR圖像

如果一個包含一個條帶或條帶數據分割的NAL 單元的nal_ref_idc 等於0 時,該條帶或條帶數據分割是一個非參考圖像的一部分。

對於序列參數集或序列參數集擴展或圖像參數集的NAL單元,nal_ref_idc不應等於0。當一個特定的圖像的一個條帶或條帶數據分割NAL單元的nal_ref_idc等於0,該圖像的所有條帶或條帶數據劃分NAL單元都應該等於0。

IDR NAL單元的nal_ref_idc不應等於0,即nal_unit_type等於5的NAL單元。
所有nal_unit_type等於6、9、10、11或12的NAL單元其nal_ref_idc都應等於0。

 ________________________________________________________________________________________

H.264的參數集又分爲序列參數集(Sequence parameter set)圖像參數集(Picture parameter set)

序列參數集包括一個圖像序列的所有信息,即兩個IDR圖像間的所有圖像信息。

圖像參數集包括一個圖像的所有分片的所有相關信息,包括圖像類型、序列號等,解碼時某些序列號的丟失可用來檢驗信息包的丟失與否。(圖像參數集,作用於視頻序列中的一個或多個個別的圖像序列和圖像參數集機制,減少了重複參數的傳送,每個VCL NAL單元包含一個標識,指向有關的圖像參數集,每個圖像參數集包含一個標識,指向有關的序列參數集的內容因此,只用少數的指針信息,引用大量的參數,大大減少每個VCL NAL單元重複傳送的信息。

多個不同的序列和圖像參數集存儲在解碼器中,編碼器依據每個編碼分片的頭部的存儲位置來選擇適當的參數集,圖像參數集本身也包括使用的序列參數集參考信息。  

參數集具體實現的方法也是多樣化的:(1)通過帶外傳輸,這種方式要求參數集通過可靠的協議,在首個片編碼到達之前傳輸到解碼器;(2)通過帶內傳輸,這需要爲參數集提供更高級別的保護,例如發送複製包來保證至少有一個到達目標;(3)在編碼器和解碼器採用硬件處理參數集。

序列參數集以及圖像參數集要在解碼前傳輸,在解碼的過程中被激活。一旦被激活,則上一個序列參數集或者圖象參數集就失效了。圖象參數集是被使用它的slice data或者使用它的A分割的Nalu激活的。而序列參數集是被使用它的圖象參數集或者包括緩衝期消息的SEI nalu所激活。同一個IDR圖象的序列參數集有相同的seq_parameter_set_id,直到一個圖象的最後一個access unit或者包括緩衝期消息的SEI Nalu,這時需要出現下一個圖象的序列參數集。下一個圖象的序列參數集被SEI nalu激活。如果序列參數集和圖象參數集是通過其他傳輸管道發送的,則要保證以上的傳輸順序。


存儲單元:

一組指定格式的NAL單元稱爲存儲單元,每個存儲單元對應一個圖像。每個存儲單元包含一組VCL NAL單元,組成一個主編碼圖像,VCL NAL單元由表示視頻圖像採樣的像條所組成。存儲單元前面可以加一個前綴,分界存儲單元,附加增強信息(SEI)(如圖像定時信息)也可以放在主編碼圖像的前面。主編碼圖像後附加的VCL NAL單元,包含同一圖像的冗餘表示,稱爲冗餘編碼圖像,當主編碼圖像數據丟失或損壞時,可用冗餘編碼圖像解碼。

編碼視頻序列

一個編碼視頻序列由一串連續的存儲單元組成,使用同一序列參數集。每個視頻序列可獨立解碼。編碼序列的開始是即時刷新存儲單元(IDR)。IDR是一個I幀圖像,表示後面的圖像不用參考以前的圖像。一個NAL單元流可包含一個或更多的編碼視頻序列。


來源:http://blog.csdn.net/wangjiannuaa/article/details/6966505

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