注:本文比較淺顯骂铁,適合初學(xué)者看。
引述:H264的標(biāo)準(zhǔn)已經(jīng)很多年了漫雕,成熟穩(wěn)定滨嘱,普及率非常高,目前比它更好的也有H265和VP9(google出品)浸间,但都不能撼動(dòng)H264的地位太雨。
A:?
h264(MPEG-4Part10), 對(duì)應(yīng)的H265就是(MPEG-4Part11)
1魁蒜、BP-Baseline Profile:基本畫(huà)質(zhì)囊扳。支持I/P 幀,只支持無(wú)交錯(cuò)(Progressive)和CAVLC兜看;
2锥咸、EP-Extended profile:進(jìn)階畫(huà)質(zhì)。支持I/P/B/SP/SI 幀细移,只支持無(wú)交錯(cuò)(Progressive)和CAVLC搏予;
3、MP-Main profile:主流畫(huà)質(zhì)弧轧。提供I/P/B 幀雪侥,支持無(wú)交錯(cuò)(Progressive)和交錯(cuò)(Interlaced)碗殷,
也支持CAVLC 和CABAC 的支持;
在BP-Baseline Profile基礎(chǔ)上另外增加了:
- 隔行編碼
- B條帶類(lèi)型
- CABAC熵編碼
- 加權(quán)預(yù)測(cè)
- 422和444 YCbCr
- 不支持ASO, FMO和RS
4速缨、HP-High profile:高級(jí)畫(huà)質(zhì)锌妻。在main Profile 的基礎(chǔ)上增加了
- 8x8內(nèi)部預(yù)測(cè)、4*4和8*8大小之間自適應(yīng)選擇的支持鸟廓。
- 自定義量化从祝、?
- 可預(yù)測(cè)無(wú)損視頻編碼
- 更多的YUV 格式襟己;
- 高級(jí)10檔次(Hi10P)引谜, 高級(jí)422,444檔次擎浴;
Baseline和Main比較常用员咽,Baseline 壓縮的比較厲害,低于mepg-4的10%-20%贮预; Main低于MPEG-4的50%.? High比Main又能節(jié)約10% 的碼流量贝室,那High應(yīng)該是低于mepg-4的45%。
壓縮率來(lái)說(shuō)就是BP>HP>MP, 比例大概是100的原始數(shù)據(jù)仿吞, 壓縮后BP=15滑频,HP=45,MP=50唤冈;
所以MP和HP其實(shí)沒(méi)啥大區(qū)別峡迷,但是BP就壓縮的很低,所以一般監(jiān)控和直播會(huì)首選BP你虹,BP的特點(diǎn)是沒(méi)有B幀绘搞,畫(huà)質(zhì)很一般,能滿(mǎn)足基本要求傅物。
【B幀的前世今生】
除了Baseline以外夯辖,其它都是有B幀的,I/B/P的關(guān)系用一句話(huà)說(shuō)就是:I就是一張完整圖片董饰,但數(shù)據(jù)很大蒿褂,如果都是I幀,視頻會(huì)很龐大卒暂,而且也沒(méi)必要啄栓;P幀是單向參考,前向參考介却,只參考I幀的谴供,記錄和I幀的區(qū)別;B幀雙向參考齿坷,參考I幀和P幀桂肌,如果被參考的P幀花屏了数焊,B幀也會(huì)花屏。
B幀會(huì)帶來(lái)一個(gè)問(wèn)題:編碼順序和解碼順序不同崎场,因?yàn)檎2シ艜r(shí)佩耳,解碼幀的排列是I BBB... P BBB... P
可以看出B幀是插在IP和PP之間的,因?yàn)锽幀數(shù)據(jù)比較小谭跨,所以會(huì)插很多幀干厚。
我們來(lái)看看編碼的順序是怎樣的:I P BBB...
解碼順序呢:I BBB...P
這問(wèn)題了來(lái),有B幀時(shí)編碼解碼BP的順序不一致螃宙,所以引入了PTS(顯示時(shí)間戳)和DTS(解碼時(shí)間戳)
貼一張裝B的圖(先留著蛮瞄,我也沒(méi)仔細(xì)看):
B:
h264的功能分為兩層,視頻編碼層(VCL)和網(wǎng)絡(luò)提取層(NAL)
VCL功能是進(jìn)行視頻編解碼谆扎,包括運(yùn)動(dòng)補(bǔ)償預(yù)測(cè)挂捅,變換編碼和熵編碼等功能;
NAL用于采用適當(dāng)?shù)母袷綄?duì)VCL視頻數(shù)據(jù)進(jìn)行封裝打包
1)VCL數(shù)據(jù)即被壓縮編碼后的視頻數(shù)據(jù)序列堂湖。
在VCL數(shù)據(jù)要封裝到NAL單元中之后闲先,才可以用來(lái)傳輸或存儲(chǔ)。
VCL里面的幾個(gè)基本概念就是: YCbCr顏色空間无蜂, 宏塊伺糠,內(nèi)循環(huán)去塊過(guò)濾器,條帶斥季,內(nèi)部預(yù)測(cè)训桶,運(yùn)動(dòng)補(bǔ)償,變換泻肯、縮放和量化渊迁;熵編碼
2)NAL單格式(NALU)
H.264定義了兩種封裝格式: RTP頭和start_code_prefix頭(00 00 01 和 00 00 00 01)
主要目的是確定NAL邊界(其實(shí)封裝都是這個(gè)目的,大同小異)灶挟。
包含針對(duì)rtp/ip琉朽, 文件格式如mp4, 服務(wù)視頻會(huì)議的h.32x稚铣, 和mpeg-2系統(tǒng)
參考:《視頻技術(shù)手冊(cè)(第5版)》