NAL支持眾多基于包的有線/無線通信網(wǎng)絡(luò),諸如H.320,、MPEG-2和RTP/IP等,。但目前,絕大部分的視頻應(yīng)用所采用的網(wǎng)絡(luò)協(xié)議層次是RTP/UDP/IP,,因此在下面的描述中主要基于這個傳輸框架,。下面首先分析NAL層的基本處理單元NALU以及它的網(wǎng)絡(luò)封裝、分割和合并的方法,。
1. NAL單元
每個NAL單元是一個一定語法元素的可變長字節(jié)字符串,,包括包含一個字節(jié)的頭信息(用來表示數(shù)據(jù)類型),以及若干整數(shù)字節(jié)的負荷數(shù)據(jù),。一個NAL單元可以攜帶一個編碼片,、A/B/C型數(shù)據(jù)分割或一個序列或圖像參數(shù)集。
NAL單元的頭信息結(jié)構(gòu)如圖3所示,,NAL單元按RTP序列號按序傳送,。其中,T為負荷數(shù)據(jù)類型,,占5bit,;R為重要性指示位,,占2個bit;最后的F為禁止位,,占1bit,。具體如下:
(1)NALU類型位
可以表示NALU的32種不同類型特征,類型1~12是H.264定義的,,類型24~31是用于H.264以外的,,RTP負荷規(guī)范使用這其中的一些值來定義包聚合和分裂,其他值為H.264保留,。
(2)重要性指示位
用于在重構(gòu)過程中標記一個NAL單元的重要性,,值越大,越重要,。值為0表示這個NAL單元沒有用于預(yù)測,,因此可被解碼器拋棄而不會有錯誤擴散;值高于0表示此NAL單元要用于無漂移重構(gòu),,且值越高,,對此NAL單元丟失的影響越大。
字串1 (3)禁止位
編碼中默認值為0,,當網(wǎng)絡(luò)識別此單元中存在比特錯誤時,,可將其設(shè)為1,以便接收方丟掉該單元,,主要用于適應(yīng)不同種類的網(wǎng)絡(luò)環(huán)境(比如有線無線相結(jié)合的環(huán)境),。例如對于從無線到有線的網(wǎng)關(guān),一邊是無線的非IP環(huán)境,,一邊是有線網(wǎng)絡(luò)的無比特錯誤的環(huán)境,。假設(shè)一個NAL單元到達無線那邊時,校驗和檢測失敗,,網(wǎng)關(guān)可以選擇從NAL流中去掉這個NAL單元,,也可以把已知被破壞的NAL單元前傳給接收端。在這種情況下,,智能的解碼器將嘗試重構(gòu)這個NAL單元(已知它可能包含比特錯誤),。而非智能的解碼器將簡單地拋棄這個NAL單元。NAL單元結(jié)構(gòu)規(guī)定了用于面向分組或用于流的傳輸子系統(tǒng)的通用格式,。在H.320和MPEG-2系統(tǒng)中,,NAL單元的流應(yīng)該在NAL單元邊界內(nèi),每個NAL單元前加一個3字節(jié)的起始前綴碼,。在分組傳輸系統(tǒng)中,,NAL單元由系統(tǒng)的傳輸規(guī)程確定幀界,因此不需要上述的起始前綴碼,。一組NAL單元被稱為一個接入單元,,定界后加上定時信息(SEI),,形成基本編碼圖像。該基本編碼圖像(PCP)由一組已編碼的NAL單元組成,,其后是冗余編碼圖像(RCP),,它是PCP同一視頻圖像的冗余表示,用于解碼中PCP丟失情況下恢復(fù)信息,。如果該編碼視頻圖像是編碼視頻序列的最后一幅圖像,,應(yīng)出現(xiàn)序列NAL單元的end,表示該序列結(jié)束,。一個圖像序列只有一個序列參數(shù)組,,并被獨立解碼。如果該編碼圖像是整個NAL單元流的最后一幅圖像,,則應(yīng)出現(xiàn)流的end,。一個接入單元的組成如圖4所示。
字串9
H.264采用上述嚴格的接入單元,,不僅使H.264可自適應(yīng)于多種網(wǎng)絡(luò),,而且進一步提高其抗誤碼能力,。序列號的設(shè)置可發(fā)現(xiàn)丟的是哪一個VCL單元,,冗余編碼圖像使得即使基本編碼圖像丟失,仍可得到較“粗糙”的圖像,。
2. H.264中的RTP
上面闡述了NAL單元的結(jié)構(gòu)和實現(xiàn),,這里要詳細討論RTP的載荷規(guī)范和抗誤碼性能。RTP可通過發(fā)送冗余信息來減少接收端的丟包率,,會增加時延,,與冗余片不同的是它增加的冗余信息是個別重點信息的備份,適合于非平等保護機制,。相應(yīng)的多媒體傳輸規(guī)范有:
(1)分組復(fù)制多次重發(fā),,發(fā)送端對最重要的比特信息分組進行復(fù)制重發(fā),使得保證接收端能至少正確接收到一次,,同時接收端要丟棄已經(jīng)正確接收的分組的多余備份,。
(2)基于分組的前向糾錯,對被保護的分組進行異或運算,,將運算結(jié)果作為冗余信息發(fā)送到接收方,。由于時延,不用于對話型應(yīng)用,,可用于流媒體,。
(3)音頻冗余編碼,可保護包括視頻在內(nèi)的任何數(shù)據(jù)流,。每個分組由頭標,、載荷以及前一分組的載荷組成,,H.264中可與數(shù)據(jù)分割一起使用。
RTP的封裝規(guī)范總結(jié)如下:
(1)額外開銷要少,,使MTU尺寸在100~64千字節(jié)范圍都可以,;
(2)易于區(qū)分分組的重要性,而不必對分組內(nèi)的數(shù)據(jù)解碼,;
字串4
(3)載荷規(guī)范應(yīng)當保證不用解碼就可識別由于其他比特丟失而造成的分組不可解碼,;
(4)支持將NALU分割成多個RTP分組;
(5)支持將多個NALU匯集在一個RTP分組中,。
H.264采用了簡單打包的方案,,即一個RTP分組里放入一個NALU,將NALU(包括同時作為載荷頭標的NALU頭)放入RTP的載荷中,,設(shè)置RTP頭標值,。理想情況下,VCL不會產(chǎn)生超過MTU尺寸的NAL單元,,來避免IP層的分拆,。在接收端,通過RTP序列信息識別復(fù)制包并丟棄,,取出有效RTP包里的NAL單元,。基本檔次和擴展檔次允許片的無序解碼,,這樣在抖動緩存中就不必對包重新排序,。在使用主檔次時(不允許片的亂序),要通過RTP序列信息來對包重新排序,,解碼順序號(DON)的概念現(xiàn)正在IETF的討論中,。
存在如下情況,例如當使用內(nèi)容預(yù)編碼時,,編碼器不了解底層網(wǎng)絡(luò)的MTU大小,,將產(chǎn)生許多大于MTU尺寸的NALU。這就需要涉及NALU的分割和合并,。
(1)NALU的分割
雖然IP層的分割可以使數(shù)據(jù)塊小于64千字節(jié),,但無法在應(yīng)用層實現(xiàn)保護,從而降低了非平等保護方案的效果,。由于UDP數(shù)據(jù)包小于64千字節(jié),,而且一個片的長度對某些應(yīng)用場合來說太小,所以應(yīng)用層打包是RTP打包方案的一部分,。目前的拆分方案正在IETF的討論之中,,大致具有以下特點:①NALU的分塊以按RTP次序號升序傳輸;②能夠標記第一個和最后一個NALU分塊,;③可以檢測丟失的分塊,。
字串6 (2)NALU的合并
一些NALU如SEI,、參數(shù)集等非常小,將它們合并在一起有利于減少頭標開銷?,F(xiàn)有的兩種集合分組:①單一時間集合分組(STAP),,按時間戳進行組合,一般用于低時延環(huán)境,;②多時間集合分組(MTAP),,不同時間戳也可以組合,一般用于高時延環(huán)境,,比如流應(yīng)用,。