音視頻 (一) —— H.264 中的 NAL 技術(shù)

音視頻 (一) —— H.264 中的 NAL 技術(shù)
音視頻 (二) —— H.264中相關(guān)參數(shù)理解
音視頻 (三) —— 視頻相關(guān)參數(shù)的理解

H.264 中的 NAL 技術(shù)

1.NAL 概述

NAL 全稱 Network Abstract Layer,即網(wǎng)絡(luò)抽象層。在 H.264/AVC 視頻編碼標(biāo)準(zhǔn)中,整個(gè)系統(tǒng)框架被分為 了兩個(gè)層面:視頻編碼層面(VCL)和網(wǎng)絡(luò)抽象層面(NAL)。其中,前者負(fù)責(zé)有效表示視頻數(shù)據(jù)的內(nèi)容, 而后者則負(fù)責(zé)格式化數(shù)據(jù)并提供頭信息,以保證數(shù)據(jù)適合各種信道和存儲(chǔ)介質(zhì)上的傳輸。 現(xiàn)實(shí)中的傳輸系統(tǒng)是多樣化的,其可靠性,服務(wù)質(zhì)量,封裝方式等特征各不相同,NAL 這一概念的提出 提供了一個(gè)視頻編碼器和傳輸系統(tǒng)的友好接口,使得編碼后的視頻數(shù)據(jù)能夠有效地在各種不同的網(wǎng)絡(luò)環(huán)境 中傳輸。

2.NAL 單元

NAL 單元是 NAL 的基本語(yǔ)法結(jié)構(gòu),它包含一個(gè)字節(jié)的頭信息和一系列來(lái)自 VCL 的稱為原始字節(jié)序列載荷 (RBSP)的字節(jié)流。頭信息中包含著一個(gè)可否丟棄的指示標(biāo)記,標(biāo)識(shí)著該 NAL 單元的丟棄能否引起錯(cuò)誤 擴(kuò)散,一般,如果 NAL 單元中的信息不用于構(gòu)建參考圖像,則認(rèn)為可以將其丟棄;最后包含的是 NAL 單 元的類型信息,暗示著其內(nèi)含有效載荷的內(nèi)容。 送到解碼器端的 NAL 單元必須遵守嚴(yán)格的順序,如果應(yīng) 用程序接收到的 NAL 單元處于亂序,則必須提供一種恢復(fù)其正確順序的方法。

3.NAL 實(shí)現(xiàn)編解碼器與傳輸網(wǎng)絡(luò)的結(jié)合

NAL 提供了一個(gè)編解碼器與傳輸網(wǎng)絡(luò)的通用接口,而對(duì)于不同的網(wǎng)絡(luò)環(huán)境,具體的實(shí)現(xiàn)方案是不同的。 對(duì)于基于流的傳輸系統(tǒng)如 H.320、MPEG 等,需要按照解碼順序組織 NAL 單元,并為每個(gè) NAL 單元增加 若干比特字節(jié)對(duì)齊的前綴以形成字節(jié)流;對(duì)于 RTP/UDP/IP 系統(tǒng),則可以直接將編碼器輸出的 NAL 單元 作為 RTP 的有效載荷;而對(duì)于同時(shí)提供多個(gè)邏輯信道的傳輸系統(tǒng),甚至可以根據(jù)重要性將不同類型的 NAL 單元在不同服務(wù)質(zhì)量的信道中傳輸。

4.結(jié)論

為了實(shí)現(xiàn)編解碼器良好的網(wǎng)絡(luò)適應(yīng)性,需要做兩方面的工作:第一、在 Codec 中將 NAL 這一技術(shù)完整而 有效的實(shí)現(xiàn);第二、在遵循 H.264/AVC NAL 規(guī)范的前提下設(shè)計(jì)針對(duì)不同網(wǎng)絡(luò)的最佳傳輸方案。如果實(shí)現(xiàn) 了以上兩個(gè)目標(biāo),所實(shí)現(xiàn)的就不僅僅是一種視頻編解碼技術(shù),而是一套適用范圍很廣的多媒體傳輸方案, 該方案適用于如視頻會(huì)議,數(shù)據(jù)存儲(chǔ),電視廣播,流媒體,無(wú)線通信,遠(yuǎn)程監(jiān)控等多種領(lǐng)域。
NALU 類型
標(biāo)識(shí) NAL 單元中的 RBSP 數(shù)據(jù)類型,其中,nal_unit_type 為 1, 2, 3, 4, 5 的 NAL 單元稱為 VCL 的 NAL
單元,其他類型的 NAL 單元為非 VCL 的 NAL 單元。
? 0:未規(guī)定
? 1:非IDR圖像中不采用數(shù)據(jù)劃分的片段
? 2:非IDR圖像中A類數(shù)據(jù)劃分片段
? 3:非IDR圖像中B類數(shù)據(jù)劃分片段
? 4:非IDR圖像中C類數(shù)據(jù)劃分片段
? 5:IDR圖像的片段
? 6:補(bǔ)充增強(qiáng)信息(SEI)
? 7:序列參數(shù)集(SPS)
? 8:圖像參數(shù)集(PPS)
? 9:分割符
? 10:序列結(jié)束符
? 11:流結(jié)束符
? 12:填充數(shù)據(jù)
? 13:序列參數(shù)集擴(kuò)展
? 14:帶前綴的NAL單元
? 15:子序列參數(shù)集
? 16–18:保留
? 19:不采用數(shù)據(jù)劃分的輔助編碼圖像片段
? 20:編碼片段擴(kuò)展
? 21–23:保留
? 24–31:未規(guī)定
NAL 的頭占用了一個(gè)字節(jié),按照比特自高至低排列可以表示如下:
0AABBBBB
其中,AA 用于表示該 NAL 是否可以丟棄(有無(wú)被其后的 NAL 參考),00b 表示沒(méi)有參考作用,可丟棄,如 B slice、SEI 等,非零——包括 01b、10b、11b——表示該 NAL 不可丟棄,如 SPS、PPS、I Slice、P Slice 等。 常用的 NAL 頭的取值如:
由于 NAL 的語(yǔ)法中沒(méi)有給出長(zhǎng)度信息,實(shí)際的傳輸、存儲(chǔ)系統(tǒng)需要增加額外的頭實(shí)現(xiàn)各個(gè) NAL 單元的定界。 其中,AVI 文件和 MPEG TS 廣播流采取的是字節(jié)流的語(yǔ)法格式,即在 NAL 單元之前增加 0x00000001 的同步 碼,則從 AVI 文件或 MPEG TS PES 包中讀出的一個(gè) H.264 視頻幀以下面的形式存在:
而對(duì)于 MP4 文件,NAL 單元之前沒(méi)有同步碼,卻有若干字節(jié)的長(zhǎng)度碼,來(lái)表示 NAL 單元的長(zhǎng)度,這個(gè)長(zhǎng)度 碼所占用的字節(jié)數(shù)由 MP4 文件頭給出;此外,從 MP4 讀出來(lái)的視頻幀不包含 PPS 和 SPS,這些信息位于 MP4 的文件頭中,解析器必須在打開(kāi)文件的時(shí)候就獲取它們。從 MP4 文件讀出的一個(gè) H.264 幀往往是下面的形式 (假設(shè)長(zhǎng)度碼為 2 字節(jié)):
SPS 詳析 PPS 詳析 SEI 詳析
NAL 在多媒體傳輸、存儲(chǔ)系統(tǒng)中的應(yīng)用
0x67: SPS
0x68: PPS
0x65: IDR
0x61: non-IDR Slice 0x01: B Slice
0x06: SEI
0x09: AU Delimiter
00 00 00 01 06 ... 00 00 00 01 67 ... 00 00 00 01 68 ... 00 00 00 01 65 ... SEI 信息 SPS PPS IDR Slice
00 19 06 [... 25 字節(jié)...] 24 aa 65 [... 9386 字節(jié)...] SEI 信息 IDR Slice。

音視頻基礎(chǔ) (一) —— 視頻中各種參數(shù)sps 、pps 、nalu、frame 、silce等 (二)

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

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

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