RTP協議格式
RFC地址:https://datatracker.ietf.org/doc/html/rfc6184
RTP報頭的格式在RFC3550中指定
? ? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|V=2|P|X| CC ? |M| ? ? PT ? ? | ? ? ? sequence number ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? timestamp ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? synchronization source (SSRC) identifier ? ? ? ? ? |+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+| ? ? ? ? ? contributing source (CSRC) identifiers ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? .... ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
格式設置如下:
-
標記位(M): 1位
? ? ? ? 對于由 RTP 時間戳指示的訪問單元的最后一個數據包,按照視頻格式中 M 位的常規用法設置,以便有效地處理播放緩沖區。對于聚合數據包(STAP 和 MTAP),RTP 頭部中的標記位必須設置為聚合數據包中最后一個 NAL 單元的標記位的值,如果該單元單獨傳輸在自己的 RTP 數據包中。解碼器可以將此位用作訪問單元最后一個數據包的早期指示,但不得依賴此特性。
? ? ? ? 說明:僅一個 M 位與攜帶多個 NAL 單元的聚合包相關聯。因此,如果網關將聚合包重新分組為多個包,則無法可靠地設置這些包的 M 位。
-
載荷類型(PT): 7位
RTP 負載類型
-
序列號(SN): 16位
? ? ? ?按照 RFC 3550 的規定進行設置和使用。對于單個 NALU 以及非交錯的分組化模式,序列號用于確定 NALU 的解碼順序。
-
時間戳(timestamp):32位
? ? ? RTP時間戳設置為內容的采樣時間戳,必須使用90kHz的時鐘頻率。
? ? ? ?如果NAL單元本身沒有自身的時序屬性(例如,參數集和SEI NAL單元),則根據規定,RTP 時間戳將設置為包含該NAL單元的接入單元的主編碼圖像的 RTP 時間戳。
有效載荷結構
? ? ? ? 數據包格式定義了三種不同的基本數據包結構。 接收方可以通過 RTP 數據包數據部分的第一個字節來識別數據包結構,該字節同時充當 RTP 數據包頭部,并且在某些情況下還作為數據包的第一個字節。這個字節總是以 NAL 單元頭部的形式存在。NAL 單元類型字段表明當前存在哪種結構。可能存在的結構如下:以下便是具體內容。
-
單個NAL單元數據包:其數據包中僅包含一個 NAL 單元。NAL 頭部類型字段與原始 NAL 單元類型相同,即在 1 到 23 之間(包括這兩個值)。
-
聚合數據包:用于將多個 NAL 單元聚合為單個 RTP 壓縮數據包的包類型。
此包存在四種版本,分別是單次聚合包類型 A(STAP-A)、單次聚合包類型 B(STAP-B)、具有 16 位偏移量的多次聚合包(MTAP16)以及具有 24 位偏移量的多次聚合包(MTAP24)。STAP-A、STAP-B、MTAP16 和 MTAP24 分配的 NAL 單元類型編號分別為 24、25、26 和 27。
? ? ? ?說明:并未對單個 NAL 單元數據包中封裝的 NAL 單元以及分片單元的大小做出限制。任何聚合數據包中封裝的 NAL 單元的最大尺寸為 65535 字節。
? ? NAL Unit Packet ? Packet Type Name ? ? ? ? ? ? ? SectionType ? ? Type-------------------------------------------------------------0 ? ? ? reserved ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -1-23 ? ? NAL unit Single NAL unit packet ? ? ? ? ? ? 5.624 ? ? ? STAP-A ? Single-time aggregation packet ? ? 5.7.125 ? ? ? STAP-B ? Single-time aggregation packet ? ? 5.7.126 ? ? ? MTAP16 ? Multi-time aggregation packet ? ? 5.7.227 ? ? ? MTAP24 ? Multi-time aggregation packet ? ? 5.7.228 ? ? ? FU-A ? ? Fragmentation unit ? ? ? ? ? ? ? ? 5.829 ? ? ? FU-B ? ? Fragmentation unit ? ? ? ? ? ? ? ? 5.830-31 ? reserved ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -
NAL單元頭使用
NAL單元頭格式:
? ? +---------------+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F|NRI| Type ? |+---------------+
-
F:1位
? ? ? ? forbidden_zero_bit。數值為 0 表示 NAL 單元類型字節和數據包不應出現位錯誤或其他語法違規情況。數值為 1 則表示 NAL 單元類型字節和數據包可以包含位錯誤或其他語法違規情況。
? ? ? ? MANEs 應將 F 位設置為 1 以表明在 NAL 單元中檢測到的比特錯誤。H.264 規范要求 F 位必須為 0。當 F 位被設置時,解碼器會收到提示,表明在數據包或 NAL 單元類型字節中可能存在比特錯誤或其他語法違規情況。對于 NAL 單元中 F 位為 1 的情況,最簡單的解碼器反應是丟棄該 NAL 單元,并將丟失的數據隱藏在被丟棄的 NAL 單元中。
NRI:2位
? ? ? ?nal_ref_idc。值 00 以及非零值的含義與 H.264 規范中的規定保持一致。換句話說,值為 00 表示該 NAL 單元的內容不會用于重建用于幀間預測的參考圖像。此類 NAL 單元可以被丟棄,而不會危及參考圖像的完整性。值大于 00 則表示需要對 NAL 單元進行解碼以保持參考圖像的完整性。
? ? ? 除了上述規定之外,根據此 RTP 壓縮數據包規范,NRI 的值表示的是由編碼器確定的相對傳輸優先級。MANE 可以利用此信息更好地保護更重要的 NAL 單元,而不會像對待不那么重要的 NAL 單元那樣那樣對待它們。最高的傳輸優先級為 11,其次是 10,然后是 01;最后,00 是最低的優先級。
? ? ? ? 說明:在 H.264 解碼器中,任何非零的 NRI 值均按相同方式處理。因此,接收方在將 NAL 單元傳遞給解碼器時無需對 NRI 的值進行任何操作。
? ? ? ?當 nal_unit_type 的值處于 1 到 12(包括 1 和 12)的范圍內時,H.264 編碼器必須根據 H.264 規范來設置 NRI 的值。具體而言,H.264 規范要求,對于所有 nal_unit_type 值為 6、9、10、11 或 12 的 NAL 單元,NRI 的值都應等于 0。
? ? ? ?對于 nal_unit_type 值為 7 或 8 的 NAL 單元(分別表示序列參數集或圖像參數集),H.264 編碼器應將 NRI 的值設置為 11(以二進制格式表示)。對于具有 nal_unit_type 值為 5 的主編碼圖像的編碼片 NAL 單元(表示屬于 IDR 圖像的編碼片),H.264 編碼器應將 NRI 的值設置為 11(以二進制格式表示)。
? ? ? 為了將剩余的 nal_unit_types 映射為 NRI 值,可以參考以下示例,該示例在特定環境中已被證明是高效的。當然,根據應用需求和所使用的 H.264 規范,可能還需要其他不同的映射方式。
? ? ? ?說明:在某些配置文件中(例如主配置文件或基線配置文件),數據分區功能不可用。因此,NAL 單元類型 2、3 和 4 只能在允許數據分區的配置文件所對應的視頻比特流中出現,而不能在主配置文件或基線配置文件所對應的比特流中出現。
? ? Table 2. Example of NRI values for coded slices and coded slicedata partitions of primary coded reference pictures ?NAL Unit Type ? ? Content of NAL Unit ? ? ? ? ? ? NRI (binary)----------------------------------------------------------------1 ? ? ? ? ? ? non-IDR coded slice ? ? ? ? ? ? ? ? ? ? ? ? 102 ? ? ? ? ? ? Coded slice data partition A ? ? ? ? ? ? ? 103 ? ? ? ? ? ? Coded slice data partition B ? ? ? ? ? ? ? 014 ? ? ? ? ? ? Coded slice data partition C ? ? ? ? ? ? ? 01 ?Informative note: As mentioned before, the NRI value of non-reference pictures is 00 as mandated by H.264.
分包模式
包含三種打包模式:
-
單NAL單元模式
-
非交錯模式
-
交錯模式
? ? ? ? 單個 NAL 單元模式適用于符合 ITU-T 建議 H.241 [3](見第 12.1 節)的會話系統。非交錯模式適用于那些可能不符合 ITU-T H.241 推薦標準的對話式系統。在非交錯模式下,NAL 單元會按照 NAL 單元解碼順序進行傳輸。交錯模式適用于那些對端到端延遲要求不十分嚴格的系統。該模式允許以不同于NAL單元解碼順序的方式傳輸NAL單元。
所采用的分組模式可通過“可選分組模式”媒體類型參數的值來指示。所使用的分組模式決定了 RTP 數據包中允許包含哪些 NAL 單元類型。表 3 概述了每種分組模式下允許的分組數據包類型。
? ? Table 3. Summary of allowed NAL unit types for each packetizationmode (yes = allowed, no = disallowed, ig = ignore) ?Payload Packet ? Single NAL ? Non-Interleaved ? InterleavedType ? Type ? ? Unit Mode ? ? ? ? ? Mode ? ? ? ? ? ? Mode-------------------------------------------------------------0 ? ? reserved ? ? ig ? ? ? ? ? ? ? ig ? ? ? ? ? ? ? ig1-23 ? NAL unit ? ? yes ? ? ? ? ? ? yes ? ? ? ? ? ? ? no24 ? ? STAP-A ? ? ? no ? ? ? ? ? ? yes ? ? ? ? ? ? ? no25 ? ? STAP-B ? ? ? no ? ? ? ? ? ? ? no ? ? ? ? ? ? yes26 ? ? MTAP16 ? ? ? no ? ? ? ? ? ? ? no ? ? ? ? ? ? yes27 ? ? MTAP24 ? ? ? no ? ? ? ? ? ? ? no ? ? ? ? ? ? yes28 ? ? FU-A ? ? ? ? no ? ? ? ? ? ? yes ? ? ? ? ? ? yes29 ? ? FU-B ? ? ? ? no ? ? ? ? ? ? ? no ? ? ? ? ? ? yes30-31 reserved ? ? ig ? ? ? ? ? ? ? ig ? ? ? ? ? ? ? ig
? ? ? ? 某些 NAL 單元或數據包類型值(如表 3 中所示為保留值)是為未來擴展預留的。此類類型的 NAL 單元(無論是以直接的分組數據包形式發送,還是作為聚合包中的聚合單元發送,亦或是作為 FU 包中的分片單元發送)都不應由發送方發送,并且接收方必須忽略這些單元。例如,編號為 1 至 23 的數據包類型(其對應的包類型為“NAL 單元”)在“單個 NAL 單元模式”和“非交錯模式”中是被允許使用的,但在“交錯模式”中則被禁止使用。然而,編號為 1 至 23 的 NAL 單元可以作為 STAP-B、MTAP16 和 MTAP24 數據包中的聚合單元,或者在 FU-A 和 FU-B 數據包中作為分片單元使用。同樣,編號為 1 至 23 的 NAL 單元也可以在“非交錯模式”中作為聚合單元使用在 STAP-A 數據包中,或者在 FU-A 數據包中作為分片單元使用,此外還可以直接用作數據包的負載。
解碼順序號(DON)
? ? ? ? ?在交錯分組模式下,NAL 單元的傳輸順序允許與 NAL 單元的解碼順序不同。解碼順序號(DON)是有效載荷結構中的一個字段或一個導出變量,用于指示 NAL 單元的解碼順序。
? ? ? ?傳輸與解碼順序的耦合由“OPTIONAL sprop-interleaving-depth”媒體類型參數進行控制,具體如下: 當“OPTIONAL sprop-interleaving-depth”媒體類型參數的值等于 0(無論是明確設定的還是默認的)時,NAL 單元的傳輸順序必須與NAL單元的解碼順序一致。當“sprop-interleaving-depth”媒體類型參數的值大于 0 :
-
在 MTAP16 和 MTAP24 中,NAL 單元的排列順序并不需要與 NAL 單元解碼順序一致。
-
在連續兩個數據包中,由解包后的 STAP-B、MTAP 和 FU 生成的 NAL 單元的順序并不需要與 NAL 單元的解碼順序一致。
? ? ? ?單個 NAL 單元數據包、STAP-A 和 FU-A 的 RTP 壓縮數據包結構中均不包含 DON。而 STAP-B 和 FU-B 的結構包含 DON,并且 MTAP 的結構能夠根據第 5.7.2 節的規定推導出 DON。
? ? ? ? 說明:在交錯模式下,如果出現 FU-A,則它總是緊隨其后的是 FU-B,而 FU-B 會設置其“開啟”狀態。
? ? ? ? 說明:如果發送方希望每個數據包中僅包含一個凈荷單元,并且按照非解碼順序發送這些數據包,那么可以使用 STAP-B 數據包類型。?
? ? ? ?在單個 NAL 單元的分組模式中,由 RTP 序號確定的 NAL 單元的傳輸順序必須與它們的 NAL 單元解碼順序相同。在非交錯分組模式中,單個 NAL 單元包、STAP-As 和 FU-As 中的 NAL 單元的傳輸順序必須與它們的 NAL 單元解碼順序相同。 STAP 內的 NAL 單元必須按照 NAL 單元解碼順序出現。因此,解碼順序首先通過 STAP 內的隱式順序提供,然后通過 STAP、FU 和單個 NAL 單元包之間的順序的 RTP 序號提供。
? ? ? ? 在 STAP-B、MTAP 以及一系列以 FU-B 開頭的分段單元中,DON 對于 NAL 單元的值的標識分別在第 5.7.1 節、第 5.7.2 節和第 5.8 節中有所規定。在傳輸順序中第一個 NAL 單元的 DON 值可以設置為任意值。DON 的值在 0 到 65535 之間(包括兩端)。達到最大值后,DON 的值會循環回到 0。
? ? ? ?在任何 STAP-B、MTAP 或一系列以 FU-B 開頭的分段單元中,包含的兩個 NAL 單元的解碼順序如下確定:設 DON(i) 為在傳輸順序中具有索引 i 的 NAL 單元的解碼順序編號。函數 don_diff(m,n) 的定義如下:
? ? If DON(m) == DON(n), don_diff(m,n) = 0 ?If (DON(m) < DON(n) and DON(n) - DON(m) < 32768),don_diff(m,n) = DON(n) - DON(m) ?If (DON(m) > DON(n) and DON(m) - DON(n) >= 32768),don_diff(m,n) = 65536 - DON(m) + DON(n) ?If (DON(m) < DON(n) and DON(n) - DON(m) >= 32768),don_diff(m,n) = - (DON(m) + 65536 - DON(n)) ?If (DON(m) > DON(n) and DON(m) - DON(n) < 32768),don_diff(m,n) = - (DON(m) - DON(n))
? ? ? ?don_diff(m,n) 的正值表示,具有傳輸順序索引為 n 的 NAL 單元在解碼順序中緊跟在具有傳輸順序索引為 m 的 NAL 單元之后。當 don_diff(m,n) 等于 0 時,這兩個 NAL 單元的解碼順序可以是任意的。don_diff(m,n) 的負值表示,具有傳輸順序索引為 n 的 NAL 單元在解碼順序中先于具有傳輸順序索引為 m 的 NAL 單元出現。
? ? ? ? 與 DON 相關的字段的值(DON、DONB 和 DOND;見第 5.7 節) 必須滿足以下條件:由上述 DON 的值所確定的解碼順序應與 NAL 單元的解碼順序一致。
? ? ? ?如果在 NAL 單元解碼順序中兩個 NAL 單元的排列順序被調換,而新的排列順序與 NAL 單元解碼順序不符,那么這兩個 NAL 單元的 DON 值一定不能相同。如果在 NAL 單元流中兩個連續的 NAL 單元的排列順序被調換,而新的排列順序仍然符合 NAL 單元解碼順序,那么這兩個 NAL 單元的 DON 值可以相同。例如,當所使用的視頻編碼規范允許任意的切片順序時,一個編碼圖像的所有編碼切片 NAL 單元都可以具有相同的 DON 值。因此,具有相同 DON 值的 NAL 單元可以以任何順序進行解碼,而具有不同 DON 值的兩個 NAL 單元則應按照上述指定的順序傳遞給解碼器。當 NAL 單元解碼順序中的兩個連續 NAL 單元具有不同的 DON 值時,解碼順序中的第二個 NAL 單元的 DON 值應為第一個 NAL 單元的 DON 值加 1。
? ? ? ?第 7 節中給出了一個用于恢復NAL單元解碼順序的解包過程示例。
? ? ? ?說明:接收方不應期望在NAL單元解碼順序中,連續兩個NAL單元的DON值的絕對差值會恰好等于1,即便在無誤傳輸的情況下也是如此。增加1并不一定必要,因為在將DON值與NAL單元關聯起來時,可能還不清楚所有NAL單元是否都已送達接收方。例如,當網絡中的帶寬不足時,網關不會轉發非參考圖像的編碼片段NAL單元或SEI NAL單元。在另一個例子中,實時直播會不時地被預先編碼的內容(如廣告)打斷。預先編碼片段的第一個幀會提前傳輸,以確保它能在接收方中隨時可用。在傳輸第一個幀內圖像時,發起方并不確切知道在預先編碼片段的第一個幀按照解碼順序出現之前會編碼多少個NAL單元。因此,在傳輸預先編碼片段的第一個幀內圖像時,必須估計該幀內圖像的NAL單元的DON值,并且可能會出現DON值的不連續情況。
單NAL單元包
? ? ? ? 此處定義的單個 NAL 單元數據包必須僅包含按照 [1] 中定義的類型所規定的唯一一個 NAL 單元。這意味著在單個 NAL 單元數據包內既不能使用聚合數據包也不能使用分片單元。由按照 RTP 序列號順序解包的單個 NAL 單元數據包組成的 NAL 單元流必須符合 NAL 單元解碼順序。單個 NAL 單元數據包的結構如圖 2 所示。
? ? Informative note: The first byte of a NAL unit co-serves as theRTP payload header. ?0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|F|NRI| Type ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? Bytes 2..n of a single NAL unit ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 2. RTP payload format for single NAL unit packet
聚合數據包
? ? ? ? ?聚合數據包是此數據包規范中的 NAL 單元聚合方案。該方案的引入是為了反映兩個關鍵目標網絡(有線 IP 網絡(其最大傳輸單元大小通常受以太網最大傳輸單元大小的限制,約為 1500 字節)和基于 IP 或非基于 IP(例如,ITU-T H.324/M)的無線通信系統,其首選傳輸單元大小為 254 字節或更小)的顯著不同的最大傳輸單元大小。為了防止兩個世界之間的媒體轉碼,并避免不必要的分組化開銷,引入了 NAL 單元聚合方案。
? ? ? ? 該規范定義了兩種聚合數據包類型:
- ?單次聚合包(STAP):將具有相同 NALU 時長的 NAL 單元進行聚合。定義了兩種類型的 STAP,一種不包含 DON(STAP-A),另一種包含 DON(STAP-B)。
- ? 多次聚合數據包(MTAP):將具有可能不同 NALU 時間戳的 NAL 單元進行聚合。定義了兩種不同的 MTAP,其區別在于 NAL 單元時間戳偏移量的長度。
? The structure of the RTP payload format for aggregation packets ispresented in Figure 3. ?0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|F|NRI| Type ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? one or more aggregation units ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 3. RTP payload format for aggregation packets
? ? ? ? 每個要包含在聚合數據包中的 NAL 單元都會被封裝在一個聚合單元中。請查看以下四種不同的聚合單元及其特性。
? ? ? ? MTAPs 和 STAPs 具有以下相同的分組規則:
- RTP 時間戳必須設置為所有待聚合的 NAL 單元的 NALU 時間戳中的最早值。
- NAL 單元類型八位字的類型字段必須設置為表 4 中所指示的相應值。
- 如果所有聚合的 NAL 單元的 F 位均為零,則 F 位必須清零;否則,該位必須置位。
- NRI 的值必須為聚合數據包中所攜帶的所有 NAL 單元中的最大值。
? ? ? ? ? ? ? ? Table 4. Type field for STAPs and MTAPs ?Type ? Packet ? Timestamp offset ? DON-related fieldsfield length ? ? ? (DON, DONB, DOND)(in bits) ? ? ? ? present--------------------------------------------------------24 ? ? STAP-A ? ? ? 0 ? ? ? ? ? ? ? ? no25 ? ? STAP-B ? ? ? 0 ? ? ? ? ? ? ? ? yes26 ? ? MTAP16 ? ? 16 ? ? ? ? ? ? ? ? yes27 ? ? MTAP24 ? ? 24 ? ? ? ? ? ? ? ? yes
? ? ? ?RTP 報頭中的標記位被設置為這樣一種值:如果將聚合數據包中的最后一個 NAL 單元單獨封裝成一個 RTP 數據包進行傳輸,那么該 NAL 單元的標記位將會是這種值。
? ? ? ?聚合數據包的負載由一個或多個聚合單元組成。有關四種不同類型的聚合單元,請參閱第 5.7.1 節和第 5.7.2 節。聚合數據包可以包含所需數量的聚合單元;然而,聚合數據包中的總數據量必須符合 IP 數據包的容量限制,并且大小應選擇得當,使得生成的 IP 數據包的大小小于最大傳輸單元(MTU)的大小。聚合數據包不得包含分段單元,這在第 5.8 節中有明確規定。聚合數據包不能嵌套;也就是說,聚合數據包不能包含另一個聚合數據包。
單時間聚合數據包(STAP)
? ? ? ? 當對所有具有相同 NALU 時間的 NAL 單元進行聚合時,應當使用單次聚合包(STAP)。STAP-A 的數據包內容不包含 DON,且至少包含一個單次聚合單元,如圖 4 所示。STAP-B 的數據包內容包括一個 16 位無符號解碼順序號(DON)(以網絡字節序表示),隨后至少包含一個單次聚合單元,如圖 5 所示。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? single-time aggregation units ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 4. Payload format for STAP-A
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+: decoding order number (DON) | ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? single-time aggregation units ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 5. Payload format for STAP-B
? ? ? ? “DON”字段指定了在傳輸順序中 STAP-B 中首個 NAL 單元的 DON 值。對于 STAP-B 中按出現順序排列的每個后續 NAL 單元,DON 的值等于(STAP-B 中前一個 NAL 單元的 DON 值 + 1)對 65536 取模的結果,其中“%”表示取模運算。
? ? ? ? 單次聚合單元由 16 位無符號大小信息(采用網絡字節序)構成,該信息表示接下來的 NAL 單元的字節數(不包括這兩個字節,但包括 NAL 單元類型的 NAL 單元字節),隨后是 NAL 單元本身,包括其 NAL 單元類型字節。單次聚合單元在 RTP 壓縮包內是字節對齊的,但可能并非在 32 位字邊界上對齊。圖 6 展示了單次聚合單元的結構。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+: ? ? ? NAL unit size ? ? ? ? | ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? NAL unit ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 6. Structure for single-time aggregation unit
? ? ? ?圖 7 展示了一個包含 STAP-A 的 RTP 數據包的示例。該 STAP 包含兩個一次性聚合單元,分別標記為 1 和 2(如圖所示)。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? RTP Header ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|STAP-A NAL HDR | ? ? ? ? NALU 1 Size ? ? ? ? ? | NALU 1 HDR ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? NALU 1 Data ? ? ? ? ? ? ? ? ? ? ? ? ? |: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+ ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? | NALU 2 Size ? ? ? ? ? ? ? ? ? | NALU 2 HDR ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? NALU 2 Data ? ? ? ? ? ? ? ? ? ? ? ? ? |: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 7. An example of an RTP packet including an STAP-Acontaining two single-time aggregation units
? ? ? ? 圖 8 展示了一個包含 STAP-B 的 RTP 數據包的示例。該 STAP 包含兩個一次性聚合單元,分別標記為 1 和 2(如圖所示)。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? RTP Header ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|STAP-B NAL HDR | DON ? ? ? ? ? ? ? ? ? ? ? ? ? | NALU 1 Size ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 1 Size ? | NALU 1 HDR ? | NALU 1 Data ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+ ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? | NALU 2 Size ? ? ? ? ? ? ? ? ? | NALU 2 HDR ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? NALU 2 Data ? ? ? ? ? ? ? ? ? ? ? ? ? ? |: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 8. An example of an RTP packet including an STAP-Bcontaining two single-time aggregation units
? ? ? ? 多時間聚合數據包(MTAPS)
? ? ? ? MTAP 的 NAL 單元數據包包含一個 16 位無符號解碼順序號基(DONB)(以網絡字節序表示)以及一個或多個多時間聚合單元,如圖 9 所示。DONB 必須包含在 MTAP 的 NAL 單元解碼順序中,作為第一個 NAL 單元的 DON 值。
? ? ? ?說明:在NAL單元解碼順序中,第一個NAL單元并不一定是這些NAL單元在MTAP封裝順序中的第一個位置。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+: decoding order number base ? | ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? multi-time aggregation units ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 9. NAL unit payload format for MTAPs
? ? ? ? ?在本規范中定義了兩種不同的多時間聚合單元。它們均由以下 NAL 單元的 16 位無符號大小信息(采用網絡字節序)、8 位無符號解碼順序號差值(DOND)以及 n 位(采用網絡字節序)的此 NAL 單元的時間戳偏移量(TS 偏移量)組成,其中 n 可為 16 或 24。不同類型的 MTAP(MTAP16 和 MTAP24)的選擇取決于應用:時間戳偏移量越大,MTAP 的靈活性就越高,但開銷也會越大。
? ? ? ? MTAP16 和 MTAP24 的多時間聚合單元結構分別如圖 10 和圖 11 所示。在一個數據包中,聚合單元的起始或結束位置并不需要位于 32 位字邊界上。多時間聚合單元中包含的 NAL 單元的 DON 值等于 (DONB + DOND) % 65536,其中 % 表示取模運算。本說明并未規定多時間聚合單元內 NAL 單元的排列順序,但在大多數情況下,應當使用 NAL 單元的解碼順序。
? ? ? ? 時間戳偏移字段必須設置為以下公式的值:如果NALU時間大于或等于數據包的RTP時間戳,則時間戳偏移等于(NAL單元的NALU時間 - 數據包的RTP時間戳)。如果NALU時間小于數據包的RTP時間戳,則時間戳偏移等于NALU時間加上(2^32 - 數據包的RTP時間戳)。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+: ? ? ? NAL unit size ? ? ? ? | ? ? DOND ? ? | TS offset ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TS offset ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? NAL unit ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 10. Multi-time aggregation unit for MTAP16
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+: ? ? ? NAL unit size ? ? ? ? | ? ? DOND ? ? | TS offset ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? TS offset ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? NAL unit ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 11. Multi-time aggregation unit for MTAP24
? ? ? ?對于“最早的”多時間聚合單元而言,其時間戳偏移量必須為零。因此,該多時間聚合單元自身的 RTP 時間戳與最早的 NALU 時間完全相同。
? ? ? ?說明:在所有多時間聚合單元中,“最早”的聚合單元是指在所有聚合單元的NAL單元被封裝為單個NAL單元包的情況下,其擴展的RTP時間戳最小的那個單元。擴展時間戳是一種位數超過32位的時戳,能夠計數時間戳字段的循環,從而能夠確定如果時間戳循環時的最小值。這樣的“最早”聚合單元可能并非在MTAP中封裝聚合單元的順序中的第一個。最早的那個NAL單元不一定與NAL單元解碼順序中的第一個NAL單元相同。
? ? ? ? 圖 12 展示了一個包含多時間聚合數據包(類型為 MTAP16)的 RTP 數據包示例,該數據包包含兩個多時間聚合單元,分別標記為圖中的 1 和 2。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? RTP Header ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|MTAP16 NAL HDR | decoding order number base ? | NALU 1 Size ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 1 Size | NALU 1 DOND | ? ? ? NALU 1 TS offset ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 1 HDR ? | NALU 1 DATA ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+ ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? | NALU 2 SIZE ? ? ? ? ? ? ? ? ? | NALU 2 DOND |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? NALU 2 TS offset ? ? ? | NALU 2 HDR ? | NALU 2 DATA |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? |: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 12. An RTP packet including a multi-time aggregationpacket of type MTAP16 containing two multi-timeaggregation units
? ? ? ?圖 13 展示了一個包含多時間聚合數據包(類型為 MTAP24)的 RTP 數據包示例,該數據包包含兩個多時間聚合單元,分別標記為圖中的 1 和 2。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? RTP Header ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|MTAP24 NAL HDR | decoding order number base ? | NALU 1 Size ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 1 Size | NALU 1 DOND | ? ? ? NALU 1 TS offs ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|NALU 1 TS offs | NALU 1 HDR ? | NALU 1 DATA ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :+ ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? | NALU 2 SIZE ? ? ? ? ? ? ? ? ? | NALU 2 DOND |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? NALU 2 TS offset ? ? ? ? ? ? ? ? ? ? ? | NALU 2 HDR ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| NALU 2 DATA ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 13. An RTP packet including a multi-time aggregationpacket of type MTAP24 containing two multi-timeaggregation units
? ? ? 分片單元(FUs)
? ? ? ?這種數據包類型允許將一個 NAL 單元分割成多個 RTP 數據包。在應用層進行這種分割,而非依賴于較低層的分割方式(例如通過 IP 進行分割),具有以下優點:
- 該數據包格式能夠通過 IPv4 網絡傳輸超過 64 k字節的 NAL 單元,該網絡可能存在于預先錄制的視頻中,特別是在高清晰度格式中(每個畫面的分片數量有限,從而導致每個畫面的 NAL 單元數量有限,這可能會導致 NAL 單元變得很大)。
- 分片機制允許將單個 NAL 單元進行分割,并按照第 12.5 節所述應用通用的前向糾錯技術。
? ? ? ? 分片僅針對單個 NAL 單元定義,而不適用于任何聚合數據包。NAL 單元的分片由該 NAL 單元的連續整數個字節組成。NAL 單元的每個字節必須恰好屬于該 NAL 單元的一個分片中。同一 NAL 單元的分片必須按順序連續發送,且其 RTP 序列號遞增(在同一個 RTP 數據包流中,第一片和最后一片之間不應發送其他 RTP 數據包)。同樣,NAL 單元必須按照 RTP 序列號的順序進行重新組裝。
? ? ? ?當一個 NAL 單元被分片并封裝在分片單元(FUs)中時,它被稱為分片后的 NAL 單元。STAP 和 MTAP 不能被分片。分片單元(FUs)不能嵌套;也就是說,一個 FUs 不能包含另一個 FUs。
? ? ? ?攜帶 FU 的 RTP 數據包的 RTP 時間戳被設置為分片 NAL 單元的 NALU 時間。
? ? ? ? 圖 14 展示了 FU-A 的 RTP 數據包格式。一個 FU-A 包括一個 8 位字節的分片單元指示符、一個 8 位字節的分片單元頭以及一個分片單元數據。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| FU indicator | ? FU header ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? FU payload ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 14. RTP payload format for FU-A
? ? ? ? 圖 15 展示了 FU-B 的 RTP 數據包格式。一個 FU-B 包由一個八位字節的分片單元指示符、一個八位字節的分片單元頭部、一個解碼順序號(DON,采用網絡字節序)以及一個分片單元數據組成。簡而言之,FU-B 的結構與 FU-A 的結構相同,只是多了一個 DON 字段。
? ? 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| FU indicator | ? FU header ? | ? ? ? ? ? ? ? DON ? ? ? ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? FU payload ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? || ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :...OPTIONAL RTP padding ? ? ? |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?Figure 15. RTP payload format for FU-B
? ? ? ? 對于一個分片的 NAL 單元的第一個分片單元,必須使用 NAL 單元類型 FU-B 在交錯分組模式下進行處理。在任何其他情況下,NAL 單元類型 FU-B 均不得使用。換句話說,在交錯分組模式下,每個被分片的 NALU 都以 FU-B 作為第一個分片單元,隨后是 1 個或多個 FU-A 分片單元。
? ? ? ? FU標識符字節的格式如下:
? ? ? +---------------+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F|NRI| Type ? |+---------------+
? ? ? ?在 FU 指示符八位字節的類型字段中,值分別為 28 和 29 的部分分別標識出一個 FU-A 和一個 FU-B。F 位的使用方法在第 5.3 節中有詳細說明。NRI 字段的值必須根據分片 NAL 單元中的 NRI 字段的值來設置。
? ? ? ? FU 標頭的格式如下:
? ? +---------------+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|S|E|R| Type ? |+---------------+
- S:1位
? ? ? 當設置為“1”時,起始位表示一個分片 NAL 單元的開始。如果后續的 FU 數據包并非分片 NAL 單元數據的起始部分,則起始位將被設置為“0”。
- E:1位
? ? ? ? 當設置為“1”時,結束位表示分片NAL 單元的結束,即有效載荷的最后一個字節也是該分片 NAL 單元的最后一個字節。如果后續的 FU 有效載荷不是分片 NAL 單元的最后一個片段,則結束位設置為“0”。
- R:1位
? ? ? ? “保留位”必須等于 0,并且接收方必須忽略該位。
- Type:5位
? ? ? ? ?如[1]表 7-1 中所定義的 NAL 單元數據包類型。
FU-Bs 中 DON 的值的選取方式如第 5.5 節所述。
? ? ? ? ?說明:在 FU-B 中的 DON 字段允許網關將 NAL 單元進行分片處理,并將其發送至 FU-B,而無需按照 NAL 單元的解碼順序對傳入的 NAL 單元進行排序。
? ? ? ? ?一個分片的NAL單元不能在一個幀單元中進行傳輸;也就是說,在同一個幀單元的頭部中,起始位和結束位都不能都設置為“1”。
? ? ? ? FU 的數據包由分片的 NAL 單元的數據包片片組成,這樣如果連續的 FU 數據包的 NAL 單元數據包按順序連接起來,就可以重組分片的 NAL 單元的數據包。分片的 NAL 單元的 NAL 單元類型八位字節并未包含在分段單元數據包中,而是分片單元指示八位字節的 F 和 NRI 字段以及 FU 頭部的類型字段中傳達了分片 NAL 單元的 NAL 單元類型八位字節的信息。一個 FU 數據包可以包含任意數量的八位字節,并且可以為空。
? ? ? ? 說明:在近乎無丟包的環境中,空的轉發單元(FU)能夠降低某些類型發送者的延遲。這些發送方的特點在于,在 NALU 完全生成之前(即在 NALU 大小尚未確定之前),他們會將 NALU 的片段進行打包。如果不允許零長度的 NALU 片段存在,那么發送方就必須在當前片段發送之前生成至少一個后續片段的數據位。由于 H.264 的特性(有時幾個宏塊占用零比特),這種情況是不可取的,還會增加延遲。然而,零長度 NALU 片段的(潛在)使用應當與因傳輸其所需額外的包而導致至少部分 NALU 失效的風險增加進行仔細權衡。
? ? ? ? 如果一個分片單元丟失了,接收方應當按照傳輸順序丟棄與該相同分片 NAL 單元相對應的所有后續分片單元。
? ? ? ?在終端設備或 MANE 中的接收器可以將一個 NAL 單元的前 n - 1 個分片聚合為一個(不完整的)NAL 單元,即便該 NAL 單元的第 n 個分片未被接收。在這種情況下,該 NAL 單元的“禁止零位”位必須設置為 1,以表明存在語法錯誤。