從H.264碼流中一眼讀出其Profile和Level

H.264是目前業(yè)界使用最多的視頻編碼格式,廣泛應(yīng)用于直播、視頻會議、在線教育和遠(yuǎn)程醫(yī)療等領(lǐng)域。本篇分享的文章假設(shè)你已經(jīng)對H.264已經(jīng)有了一些基本的了解,例如已經(jīng)知道什么是SPS和PPS,知道什么是I幀、P幀和B幀,知道了NALU的抽象概念,知道了Profile和Level的概念,否則本篇文章可能暫時不適合你。

Profile和Level是H.264中一個非常重要的概念,Profile用于確定視頻編碼過程中幀間壓縮使用的算法(例如是否包含B幀、CABAC支持、顏色空間支持等),Profile越高,就說明采用了越高級的壓縮特性,對應(yīng)的對編解碼硬件的要求也越高;Level是對視頻本身特性的一些描述(碼率,分辨率,fps等),Level越高,視頻的碼率、分辨率、fps越高。下面兩張圖來自維基百科,分別對應(yīng)了不同的Profiel和Level支持的能力和特性。

H264 Profile
H264 Level

對于H.264的Profile和Level比較專業(yè)化(你這么去描述,行業(yè)里的人會認(rèn)為你很專業(yè))的描述是:Profile@Level,例如Main@4.2,Baseline@3.1,High@5.0。

我們知道,H.264對于計算機來說,本質(zhì)上其實就是一連串隨著時間推移的比特流,至于這些比特流分別代表什么意義,制定H.264標(biāo)準(zhǔn)的那幫家伙給定義好了,大家只要都遵守這個標(biāo)準(zhǔn)就可以了。我們?nèi)绾螐囊贿B串的H.264比特流里快速地讀出其Profile和Level呢,這是本篇的重點。

在H.264標(biāo)準(zhǔn)中,Profile和Level信息是定義在SPS NALU中的,SPS又是H.264的第一個NALU,所以知道了SPS這個NALU中每一個字節(jié)的意義就可以很快地從中分辨出Profile和Level。

下圖是H.264官方標(biāo)準(zhǔn)中對于SPS RBSP的定義。

SPS RBSP

PS:H.264的官方標(biāo)準(zhǔn)定義參考:H.264標(biāo)準(zhǔn)

根據(jù)H.264標(biāo)準(zhǔn)定義,SPS的RBSP,第1個字節(jié)和3個字節(jié)分別代表profile_idc和了level_idc信息。如果加上起始碼(Annex-B格式)的3或4個字節(jié),再加上1個字節(jié)的NALU Header,那一個H.264裸流的第6(或5)個字節(jié)就是profile_idc,第8(或7)個字節(jié)就是Level_idc,只要讀出這兩個字節(jié)的數(shù)值就可以快速方便地得到這個H.264流的Profile和Level。

Profile & Level byte

profile_idc字段各值代表的含義如下。

profile_idc(十進(jìn)制) 含義
66 Baseline
77 Main
88 Extended
100 High (FRExt)
110 High 10 (FRExt)
122 High 4:2:2 (FRExt)
166 High 4:4:4 (FRExt)

實際使用中,Baseline,Main和High Profile比較常見,我們只需要記住幾個關(guān)鍵的數(shù)字即可。66:Baseline,77:Main,>=100:High

level_idc字段代表的含義如下。

level_idc(十進(jìn)制) 含義
10 1 (supports only QCIF format and below with 380160 samples/sec)
1 1.1 (CIF and below. 768000 samples/sec)
12 1.2 (CIF and below. 1536000 samples/sec)
13 1.3 (CIF and below. 3041280 samples/sec)
20 2 (CIF and below. 3041280 samples/sec)
21 2.1 (Supports HHR formats. Enables Interlace support. 5068800 samples/sec)
22 2.2 (Supports SD/4CIF formats. Enables Interlace support. 5184000 samples/sec)
30 3 (Supports SD/4CIF formats. Enables Interlace support. 10368000 samples/sec)
31 3.1 (Supports 720p HD format. Enables Interlace support. 27648000 samples/sec)
32 3.2 (Supports SXGA format. Enables Interlace support. 55296000 samples/sec)
40 4 (Supports 2Kx1K format. Enables Interlace support. 62914560 samples/sec)
41 4.1 (Supports 2Kx1K format. Enables Interlace support. 62914560 samples/sec)
42 4.2 (Supports 2Kx1K format. Frame coding only. 125829120 samples/sec)
50 5 (Supports 3672x1536 format. Frame coding only. 150994944 samples/sec)
51 5.1 (Supports 4096x2304 format. Frame coding only. 251658240 samples/sec)

Level很簡單,level_idc的十進(jìn)制數(shù)值除以10即是H.264的Level值。

結(jié)合上面三個表格即可快速計算出Profile和Level信息,下面是三個例子。

例子:碼流1

SPS RBSP

Profile = 0x42 = 66 = Baseline, Level = 0x1F = 31 = 3.1; 所以該碼流可以描述為Baseline@L3.1

例子:碼流2

SPS RBSP

Profile = 0x4D = 77 = Main, Level = 0x28 = 40 = 4.0; 所以該碼流可以描述為Main@L4.0

例子:碼流3

SPS RBSP

Profile = 0x64 = 100 = High, Level = 0x28 = 40 = 4.0; 所以該碼流可以描述為High@L4.0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容