亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

H264格式具體說明

系統 1876 0
一 H.264句法1.1元素分層結構H.264編碼器輸出的Bit流中,每一個Bit都隸屬于某個句法元素。句法元素被組織成有層次的結構,分別描寫敘述各個
一 H.264句法
1.1元素分層結構

H.264編碼器輸出的Bit流中,每一個Bit都隸屬于某個句法元素。句法元素被組織成有層次的結構,分別描寫敘述各個層次的信息。



圖1

H.264分層結構由五層組成,各自是序列參數集、圖像參數集、片(Slice)、和宏塊和子塊。參數集是一個獨立的數據單位,不依賴于參數集外的其他句法元素。圖2描寫敘述了參數集與參數集外的句法元素之間的關系。





圖2

一個參數集不正確應某一個特定的圖像或序列,同一序列參數集能夠被多個圖像參數集引用,同理,同一個圖像參數集也能夠被多個圖像引用。僅僅在編碼器覺得須要更新參數集的內容時,才會發出新的參數集。



在H.264中,圖像以序列為單位進行組織。一個序列的第一個圖像叫做IDR圖像,IDR圖像都是I幀,H.264引入IDR圖像為了解碼的同步,當解碼 器解碼到IDR圖像時,馬上將參考幀隊列清空,將已解碼的數據所有輸出或拋棄,又一次查找參數集,開始一個新的序列。這樣,假設前一個序列出現重大錯誤,在 這里能夠獲得又一次同步的機會。IDR圖像之后的圖像永遠不會使用IDR之前的圖像的數據來解碼。



IDR是I幀,但I幀不一定是IDR。I幀之后的圖像有可能會使用I幀之前的圖像做運動參考。


1.2描寫敘述子

描寫敘述子描寫敘述從Bit流中取出句法元素的方法。
編號
語法
說明

1
ae(e)
CABAC

2
b(8)
讀進連續的8個Bit

3
ce(v)
CA vlc

4
f(n)
讀進連續的n個Bit

5
i(n)/i(v)
讀進連續的若干Bit,并把它們解釋為有符號整數

6
me(v)
映射指數Golomb熵編碼

7
se(v)
有符號指數Golomb熵編碼

8
te(v)
截斷指數Golomb熵編碼

9
u(n)/u(v)
讀進連續的若干Bit,并把它們解釋為無符號整數

10
ue(v)
無符號指數Golomb熵編碼


表1
1.3句法的表示方法

句法元素的名稱由小寫字母和一系列下劃線組成,變量名稱是大寫和小寫字母組成,中間沒有下劃線。
二 句法表

定義了H.264的句法,指明在碼流中依次出現的句法元素及它們出現的條件、提取描寫敘述子等。句法表是分層嵌套的。

句法表中的C字段表示該句法元素的分類,這是為片區服務,分類的詳細含義例如以下表描寫敘述。
nal_unit_type
NAL類型
C

0
未使用


1
不分區、非IDR的片
2,3,4

2
片分區A
2

3
片分區B
3

4
版分區C
4

5
IDR圖像中的片
2,3

6
補充增強信息單元(SEI)
5

7
序列參數集
0

8
圖像參數集
1

9
分界符
6

10
序列結束
7

11
碼流結束
8

12
填充
9

13..23
保留


24..31
不保留



表2
2.1 NAL語法

編碼器將每一個NAL各自獨立、完整地放入一個分組,由于分組都有頭部,解碼器能夠方便地檢測出NAL的分界,并依次取出NAL進行解碼。

每一個NAL前有一個起始碼 0x000001,解碼器檢測每一個起始碼,作為一個NAL的起始標識,當檢測到下一個起始碼時,當前NAL結束。同一時候H.264規定,當檢測到 0x000000時,也能夠表征當前NAL的結束。對于NAL中數據出現0x000001或0x000000時,H.264引入了防止競爭機制,假設編碼 器檢測到NAL數據存在0x000001或0x000000時,編碼器會在最后個字節前插入一個新的字節0x03,這樣:

0x000000->0x00000300

0x000001->0x00000301

0x000002->0x00000302

0x000003->0x00000303

解碼器檢測到0x000003時,把03拋棄,恢復原始數據。

解碼器在解碼時,首先逐個字節讀取NAL的數據,統計NAL的長度,然后再開始解碼。


句法
C
Desc

nal_nuit(NumBytesInNALunit){/* NumBytesInNALunit為統計出來的數據長度 */



forbidden_zero_bit /* 等于0 */
All
f(1)

nal_ref_idc/* 當前NAL的優先級,取值范圍0-3 */
All
u(2)

nal_unit_type /* NAL類型,見表2描寫敘述 */
All
u(5)

NumBytesInRBSP=0



for(i=1;i<NumBytesInNALunit;i++){



if(i+2<NumBytesInNALunit && next_bits(24)==0x000003{



/* 0x000003偽起始碼,須要刪除0x03這個字節 */



rbsp_byte[NumBytesInRBSP++]
All
b(8)

rbsp_byte[NumBytesInRBSP++]
All
b(8)

i+=2/* 取出前兩個0x00后,跳過0x03 */



emulation_prevention_three_byte/* equal to 0x03 */
All
f(8)

}else{



rbsp_byte[NumBytesInRBSP++] /* 繼續讀取后面的字節 */
All
b(8)

}



}




表3
2.2序列參數集(SPS)
句法
C
Desc

seq_parameter_set_rbsp(){



profile_idc/* 指明所用的Profile */
0
u(8)

constraint_set0_flag
0
u(1)

constraint_set1_flag
0
u(1)

constraint_set1_flag
0
u(1)

reserved_zero_5bits /* equal to 0 */
0
u(5)

level_idc /* 指明所用的Level */
0
u(8)

seq_parameter_set_id /* 指明本序列參數集的id號,0-31,被圖像集引用,編碼須要產生新的序列集時,使用新的id,而不是改變原來參數集的內容 */
0
ue(v)

log2_max_frame_num_minus4/* 為讀取元素frame_num服務,frame_num標識圖像的解碼順序,frame_num的解碼函數是ue(v),當中 v=log2_max_frame_num_minus4+4,該元素同一時候指明frame_num的最大值MaxFrameNum=2( log2_max_frame_num_minus4+4)*/
0
ue(v)

pic_order_cnt_type /* 指明poc的編碼方法,poc標識圖像的播放順序,poc能夠由frame_num計算,也能夠顯示傳送。poc共三種計算方式 */
0
ue(v)

if(pic_order_cnt_type==0)



log2_max_pic_order_cnt_lsb_minus4 /* 指明變量MaxPicOrderCntLsb的值, MaxPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4) */
0
ue(v)

else if(pic_order_cnt_type==1){



delta_pic_order_always_zero_flag /* 等于1時,元素delta_pic_order_cnt[0]和delta_pic_order_cnt[1]不在片頭中出現,而且它們的默認值是0,等于0時,上述兩元素出現的片頭中 */
0
u(1)

offset_for_non_ref_pic /* 用來計算非參考幀或場的poc,[-231,231-1] */
0
se(v)

offset_for_top_to_bottom_field/* 計算幀的底場的poc */
0
se(v)

num_ref_frames_inpic_order_cnt_cycle /* 用來解碼poc,[0.255] */
0
ue(v)

for(i=0;i<num_ref_frames_inpic_order_cnt_cycle;i++)



offset_for_ref_frame[i]/* 用來解碼poc,對于循環中的每一個元素指定一個偏移 */
0
se(v)

}



num_ref_frames /* 參考幀隊列可達到的最大長度,[0,16] */
0
ue(v)

gaps_in_frame_num_value_allowed_flag /* 為1,同意slice header中的frame_num不連續 */
0
u(1)

pic_width_inmbs_minus1 /* 本元素加1,指明以宏塊為單位的圖像寬度 PicWidthInMbs=pic_width_in_mbs_minus1+1 */
0
ue(v)

pic_height_in_map_units_minus1 /* 本元素加1,指明以宏塊為單位的圖像高寬度 PicHeightInMapUnitsMbs=pic_height_in_map_units_minus1+1 */
0
ue(v)

frame_mbs_only_flag /* 等于0表示本序列中全部圖像均為幀編碼;等于1,表示可能是幀,也可能場或幀場自適應,詳細編碼方式由其他元素決定。結合前一元 素:FrameHeightInMbs=(2-frame_mbs_only_flag)*PicHeightInMapUnits */
0
ue(v)

if(frame_mbs_only_flag)



mb_adaptiv_frame_field_flag /* 指明本序列是否是幀場自適應模式:

frame_mbs_only_flag=1,所有是幀

frame_mbs_only_flag=0, mb_adaptiv_frame_field_flag=0,幀場共存

frame_mbs_only_flag=0, mb_adaptiv_frame_field_flag=1,幀場自適應和場共存*/
0
u(1)

direct_8x8_inference_flag /* 用于指明B片的直接和skip模式下的運動矢量的計算方式 */
0
u(1)

frame_cropping_flag /* 解碼器是否要將圖像裁剪后輸出,假設是,后面為裁剪的左右上下的寬度 */
0
u(1)

if(frame_cropping_flag){



frame_crop_left_offset
0
ue(1)

frame_crop_right_offset
0
ue(1)

frame_crop_top_offset
0
ue(1)

frame_crop_bottom_offset
0
ue(1)

}



vui_parameters_present_flag /* 指明vui子結構是否出如今碼流中,vui子結構在附錄中指明,用于表征 視頻 格式的信息 */
0
u(1)

if(vui_parameters_present_flag)



vui_parameters()
0


rbsp_trailing_bits()
0


}




表4
?

H264格式具體說明


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人aaaa| 四虎影院最新 | 久久精品国产精品2020 | 国产美女a做受大片在线观看 | 亚洲成人免费视频 | 久久久精品视频在线观看 | 爱操视频在线观看 | 国产成人亚洲综合在线 | 99精品国产自产在线观看 | 在线一级毛片 | 久久水蜜桃 | 亚洲最大色网站 | 国产免费午夜a无码v视频 | 亚洲国产午夜精品理论片的软件 | 日韩专区亚洲国产精品 | 九九热在线免费 | 亚洲国产99在线精品一区二区 | 亚洲成aⅴ人片在线观 | 热99re久久国超精品首页 | 91视频免费观看高清观看完整 | 四虎在线播放免费永久视频 | 日本一级毛片免费播放 | 夜夜夜爽爽爽久久久 | 欧美毛片性视频区 | 99久热在线精品视频播 | 亚色在线播放 | 一本久久a久久精品vr综合 | 福利国产| 看全色黄大色大片免费久久久 | 久久精品国产这里是免费 | 久久久国产精品va麻豆 | 亚洲图片一区二区 | 一级中文字幕 | 久久精品综合免费观看 | h片在线免费观看 | 国产精品日韩欧美在线第3页 | 国产精品福利午夜h视频 | 欧美成人免费一级人片 | 成人9久久国产精品品 | 亚洲精品一区亚洲精品 | 久久久久久久久免费视频 |