音視頻學(xué)習(xí)從零到整-- H264碼流結(jié)構(gòu)

音視頻學(xué)習(xí)從零到整(1)
音視頻學(xué)習(xí)從零到整(2)
音視頻學(xué)習(xí)從零到整(3)
音視頻學(xué)習(xí)從零到整(4)
音視頻學(xué)習(xí)從零到整(5)
音視頻學(xué)習(xí)從零到整(6)
音視頻學(xué)習(xí)從零到整(7)

一.H264結(jié)構(gòu)圖

H264結(jié)構(gòu)圖

H264視頻壓縮后會(huì)成為一個(gè)序列幀.幀里包含圖像,圖像分為很多片.每個(gè)片可以分為宏塊.每個(gè)宏塊由許多子塊組成.這就是H264結(jié)構(gòu)圖.非常的情緒簡單.

H264結(jié)構(gòu)中,一個(gè)視頻圖像編碼后的數(shù)據(jù)叫做一幀跃赚,一幀由一個(gè)片(slice)或多個(gè)片組成州藕,一個(gè)片由一個(gè)或多個(gè)宏塊(MB)組成扩氢,一個(gè)宏塊由16x16的yuv數(shù)據(jù)組成。宏塊作為H264編碼的基本單位效五。

  • 場和幀:視頻的一場或一幀可用來產(chǎn)生一個(gè)編碼圖像。在電視中,為減少大面積閃爍現(xiàn)象蝎宇,把一幀分成兩個(gè)隔行的場。

  • :每個(gè)圖象中祷安,若干宏塊被排列成片的形式姥芥。片分為I片、B片汇鞭、P片和其他一些片凉唐。

    • I片只包含I宏塊庸追,P片可包含P和I宏塊,而B片可包含B和I宏塊熊榛。

    • I宏塊利用從當(dāng)前片中已解碼的像素作為參考進(jìn)行幀內(nèi)預(yù)測锚国。

    • P宏塊利用前面已編碼圖象作為參考圖象進(jìn)行幀內(nèi)預(yù)測。

    • B宏塊則利用雙向的參考圖象(前一幀和后一幀)進(jìn)行幀內(nèi)預(yù)測玄坦。

    • 片的目的是為了限制誤碼的擴(kuò)散和傳輸血筑,使編碼片相互間是獨(dú)立的。

  • 某片的預(yù)測不能以其它片中的宏塊為參考圖像煎楣,

  • 這樣某一片中的預(yù)測誤差才不會(huì)傳播到其它片中去

  • 宏塊:一個(gè)編碼圖像通常劃分成若干宏塊組成豺总,一個(gè)宏塊由一個(gè)16×16亮度像素和附加的一個(gè)8×8 Cb和一個(gè)8×8 Cr彩色像素塊組成。

二. H264編碼分層

H264編碼分層,分為了2層.

  • NAL層: (Network Abstraction Layer,視頻數(shù)據(jù)網(wǎng)絡(luò)抽象層)

    • 它的作用是H264只要在網(wǎng)絡(luò)上傳輸,在傳輸?shù)倪^程每個(gè)包以太網(wǎng)是1500字節(jié). 而H264的幀往往會(huì)大于1500字節(jié)的.所以就要進(jìn)行拆包. 將一個(gè)幀拆成多個(gè)包進(jìn)行傳輸.所有的拆包或者組包都是通過NAL層去處理的.
  • VCL層:(Video Coding Layer,視頻數(shù)據(jù)編碼層) 它的作用就是對視頻原始數(shù)據(jù)進(jìn)行壓縮.

三.碼流的基本概念

  • SODB:(String of Data Bits,原始數(shù)據(jù)比特流),長度不一定是8的倍數(shù).它是由VCL層產(chǎn)生的.因?yàn)榉?的倍數(shù)所以處理比較麻煩.

  • RBSP:(Raw Byte Sequence Payload,SODB+trailing bits).算法是在SODB最后一位補(bǔ)1.不按字節(jié)對齊補(bǔ)0. 如果補(bǔ)齊0,不知道在哪里結(jié)束.所以補(bǔ)1.如果不夠8位則按位補(bǔ)0.

  • EBSP:(Encapsulate Byte Sequence Payload).就是生成壓縮流之后,我們還要在每個(gè)幀之前加一個(gè)起始位.起始位一般是十六進(jìn)制的0001.但是在整個(gè)編碼后的數(shù)據(jù)里,可能會(huì)出來連續(xù)的2個(gè)0x00.那這樣就與起始位產(chǎn)生了沖突.那怎么處理了? H264規(guī)范里說明如果處理2個(gè)連續(xù)的0x00,就額外增加一個(gè)0x03 .這樣就能預(yù)防壓縮后的數(shù)據(jù)與起始位產(chǎn)生沖突.

每個(gè)NAL前有一個(gè)起始碼 0x00 00 01(或者0x00 00 00 01)择懂,解碼器檢測每個(gè)起始碼喻喳,作為一個(gè)NAL的起始標(biāo)識(shí),當(dāng)檢測到下一個(gè)起始碼時(shí)困曙,當(dāng)前NAL結(jié)束表伦。
同時(shí)H.264規(guī)定,當(dāng)檢測到0x00 00 01時(shí)慷丽,也可以表征當(dāng)前NAL的結(jié)束蹦哼。那么NAL中數(shù)據(jù)出現(xiàn)0x000001或0x000000時(shí)怎么辦?H.264引入了防止競爭機(jī)制要糊,如果編碼器檢測到NAL數(shù)據(jù)存在0x000001或0x000000時(shí)纲熏,編碼器會(huì)在最后個(gè)字節(jié)前插入一個(gè)新的字節(jié)0x03,這樣:
解碼器檢測到0x000003時(shí)锄俄,把03拋棄局劲,恢復(fù)原始數(shù)據(jù)(脫殼操作)。解碼器在解碼時(shí)奶赠,首先逐個(gè)字節(jié)讀取NAL的數(shù)據(jù)鱼填,統(tǒng)計(jì)NAL的長度,然后再開始解碼毅戈。

  • NALU: NAL Header(1B)+EBSP.NALU就是在EBSP的基礎(chǔ)上加1B的網(wǎng)絡(luò)頭.

四. 詳解NAL Unit

NAL Unit

NAL 單元是由一個(gè)NALU頭部+一個(gè)切片.切片又可以細(xì)分成"切片頭+切片數(shù)據(jù)".我們之間了解過一個(gè)H254的幀是由多個(gè)切片構(gòu)成的.因?yàn)橐粠瑪?shù)據(jù)一次有可能傳不完.

切片與宏塊的關(guān)系(Slice & MacroBlock)

切片與宏塊的關(guān)系

每個(gè)切片都包括切片頭+切片數(shù)據(jù). 那每個(gè)切片數(shù)據(jù)包括了很多宏塊.每個(gè)宏塊包括了宏塊的類型,宏塊的預(yù)測,殘差數(shù)據(jù).

圖解H264切片

在一副壓縮的H264的幀里,可以包含多個(gè)切片.至少有一個(gè)切換.


圖解H264切片

H264碼流分層結(jié)構(gòu)圖.

H264碼流分層結(jié)構(gòu)圖
  • A Annex格式數(shù)據(jù),就是起始碼+Nal Unit 數(shù)據(jù)
  • NAL Unit: NALU 頭+NALU數(shù)據(jù)
  • NALU 主體,是由切片組成.切片包括切片頭+切片數(shù)據(jù)
  • Slice數(shù)據(jù): 宏塊組成
  • PCM類: 宏塊類型+pcm數(shù)據(jù),或者宏塊類型+宏塊模式+殘差數(shù)據(jù)
  • Residual: 殘差塊.

這個(gè)圖比較重要.大家可以多看看.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剔氏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竹祷,更是在濱河造成了極大的恐慌谈跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塑陵,死亡現(xiàn)場離奇詭異感憾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門阻桅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凉倚,“玉大人,你說我怎么就攤上這事嫂沉』” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵趟章,是天一觀的道長杏糙。 經(jīng)常有香客問我,道長蚓土,這世上最難降的妖魔是什么宏侍? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蜀漆,結(jié)果婚禮上谅河,老公的妹妹穿的比我還像新娘。我一直安慰自己确丢,他們只是感情好绷耍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲜侥,像睡著了一般锨天。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剃毒,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音搂赋,去河邊找鬼赘阀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脑奠,可吹牛的內(nèi)容都是我干的基公。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼宋欺,長吁一口氣:“原來是場噩夢啊……” “哼轰豆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起齿诞,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤酸休,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后祷杈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑司,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年但汞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宿刮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片互站。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖僵缺,靈堂內(nèi)的尸體忽然破棺而出胡桃,到底是詐尸還是另有隱情,我是刑警寧澤磕潮,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布翠胰,位于F島的核電站,受9級(jí)特大地震影響揉抵,放射性物質(zhì)發(fā)生泄漏亡容。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一冤今、第九天 我趴在偏房一處隱蔽的房頂上張望闺兢。 院中可真熱鬧,春花似錦戏罢、人聲如沸屋谭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桐磁。三九已至,卻和暖如春讲岁,著一層夾襖步出監(jiān)牢的瞬間我擂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工缓艳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留校摩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓阶淘,卻偏偏與公主長得像衙吩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子溪窒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容