RTP H264 NAL

H264 採用了多種錯誤恢復及適合網絡傳輸的NAL特點來使用各種實時視頻傳輸。

 

(1)參數集:序列參數集和圖像參數集

  • 序列參數集包括一個圖像序列的所有信息,即兩個IDR圖像間的所有圖像信息
  • 圖像參數集包括一個圖像的所有分片的所有相關信息,包括圖像類型、序列號等,解碼時某些序列號的丟失可用來校驗信息包的丟失與否。
  • 多個不同的序列和圖像參數集存儲在解碼器中,編碼器依據每個編碼分片的頭部存儲位置來選擇適當的參數集,圖像及本身也包括使用的序列參數集等參考信息。

 

(6)NAL單元:network adaptation layer

  • 每個NAL單元是一個一定字語法元素的可變長字節字符串,包括包含一個字節的頭信息(用來表示數據類型),以及若干個整數字節的負荷數據。
  • 一個NAL單元可以攜帶一個編碼片,A/B/C型數據分割或一個序列或一個圖像參數集。
  • h.264採用NAL單元接入可適用多種網絡,而且進一步提高其抗誤碼能力。
  • 序列號的設置可以發現丟失的事哪一個VCL單元,沉餘編碼圖像使得基本編碼圖像丟失仍可得到較“粗糙”的圖像。

網絡抽象層單元類型

 

5.  RTP 荷載格式

5.1.  RTP頭的使用

   RTP 頭的格式在RFC 3550 [4]中指定爲了方便在圖1又顯示出來。本載荷格式使用頭中域的方式和該規範一致。

   當一個 NAL 單元封裝在每個RTP包中, 推薦的RTP荷載格式在5.6節指定。對於聚合包/分片包的RTP荷載 (以及一些rtp頭域的設置)在5.7和5.8節指定。

       0                   1                   2                   3
       0 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             |
      |                             ....                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       圖 1.  RTP 頭。

   根據RTP荷載格式設置的RTP頭信息按如下設置: 
   
   Marker bit (M): 1 bit
      對於RTP時戳指示的訪問單元的最後一個包本位進行設置,符合視頻格式M位的常規使用,以允許有效緩衝處理佈局。對於聚合包(STAP,MTAP),RTP頭中的M位必須設置成最後一個NAL單元如果被傳送在單個RTP包中時M位對應的值。解碼器可以使用本位作爲早期最後一個包的指示,但是不可以依賴本屬性。

       注:運送多個NAL單元的聚合包只有一個M位相關聯。因此,如果一個網關重新打包一個聚合包爲幾個包,它可能不會可靠設置這些包的M位。

   Payload type (PT): 7 bits
      本新的包格式的荷載類型的值超過本文檔的範圍,在此不指明。荷載類型的賦值或者通過profile或者通過動態方式。

   Sequence number (SN): 16 bits
   	根據RFC 3550設置使用. 對於單個NALU與非交錯打包方式, 序號用於對定NALU解碼順序。

   Timestamp: 32 bits
      RTP時戳設置爲內容的採樣時戳。必須使用90 kHz 時鐘頻率。

      如果NAL單元沒有他自己的時間屬性(即,parameter set and SEI NAL units),RTP時戳設置成訪問單元主編碼圖像的RTP時戳,根據[1]的7.4.1.2節。

      MTAPs時戳的設置在5.7.2定義.

      接收者應該忽略包含在訪問單元(只有一個顯示時戳)的任何圖像時間SEI消息,相反,接收者應該使用RTP時戳同步顯示過程。
      
      RTP發送者你不應該傳送圖像時間 SEI消息對於不支持被顯示成多個場的圖像。

      如果一個訪問單元有多於一個顯示時戳在圖像時間SEI消息中, SEI消息中的信息應該被對待成相對於RTP時戳的,最早事件發生在RTP時戳給定的時間, 後續事件發生的時間由SEI消息中圖像時間值差給定。假設tSEI1, tSEI2, ...,tSEIn 爲SEI消息中運送的顯示時間戳, 其中tSEI1 是所有這樣時間戳的最早值。tmadjst()是一個函數,他調整SEI消息時間到90-kHz時間.TS是RTP時戳.則,和tSEI1關聯的顯示時間是TS. 和tSEIx[x=[2..n]]關聯事件的顯示時間爲 
      TS + tmadjst (tSEIx - tSEI1).

		註釋: 在一個3:2摺疊的操作中需要顯示編碼的幀作爲場, 在其中組成編碼幀	的電影內容使用隔行掃描顯示。圖像定時SEI消息使得運送相同編碼圖像的多個時戳,	因此3:2摺疊過程正確控制。圖像定時SEI消息機制是必須的,因爲在RTP時戳中只可以	運送個時戳。

		註釋:因爲H.264允許解碼順序可以和顯示順序不同, RTP時戳的值針對於RTP序	號可以不是單調非減的。而且RTCP報告中的抖動區間值可以不是網絡性能問題的指示, 	as the calculation rules for interarrival jitter (section 6.4.1 of RFC 	3550) assume that the RTP timestamp of a packet is directly proportional to 	its transmission time.

5.2. RTP 荷載格式的公共結構

   荷載格式定義三個不同的基本荷載結構。一個接收者可以識別荷載結構通過RTP荷載的第一個字節, 他也共享爲RTP荷載頭,某些情況下,作爲荷載的第一個字節。本字節總是結構化爲NAL單元頭. NAL單元類型指示目前使用那個結構. 可能的結構如下:
   
   單個NAL單元包: 荷載中只包含一個NAL單元。NAL頭類型域等於原始 NAL單元類型,即在範圍1到23之間. 5.6指定

   聚合包: 本類型用於聚合多個NAL單元到單個RTP荷載中。本包有四種版本,單時間聚合包類型A (STAP-A), 單時間聚合包類型B (STAP-B), 多時間聚合包類型(MTAP)16位位移(MTAP16), 多時間聚合包類型(MTAP)24位位移(MTAP24)。賦予STAP-A, STAP-B, MTAP16, MTAP24的NAL單元類型號分別是 24, 25, 26, 27。見5.7.

   分片單元: 用於分片單個NAL單元到多個RTP包。現存兩個版本FU-A,FU-B,用NAL單元類型 28,29標識。見5.8.

   Table 1.  單元類型以及荷載結構總結

      Type   Packet    Type name                        Section
      ---------------------------------------------------------
      0      undefined                                    -
      1-23   NAL unit  Single NAL unit packet per H.264   5.6
      24     STAP-A    Single-time aggregation packet     5.7.1
      25     STAP-B    Single-time aggregation packet     5.7.1
      26     MTAP16    Multi-time aggregation packet      5.7.2
      27     MTAP24    Multi-time aggregation packet      5.7.2
      28     FU-A      Fragmentation unit                 5.8
      29     FU-B      Fragmentation unit                 5.8
      30-31  undefined                                    -

      註釋: 本規範沒有限制封裝在單個NAL單元包和分片單元的大小。封裝在聚合包中的 NAL單元大小爲65535字節。

5.3.  NAL單元字節使用

   NAL單元字節的結構語義在1.3節介紹。爲了方便,NAL單元類型字節的格式在下面列出:

      +---------------+
      |0|1|2|3|4|5|6|7|
      +-+-+-+-+-+-+-+-+
      |F|NRI|  Type   |
      +---------------+

   本部分根據本規範指定F和NRI的語義。

   F: 1 bit
      forbidden_zero_bit.  A value of 0 indicates that the NAL unit type
      octet and payload should not contain bit errors or other syntax
      violations.  A value of 1 indicates that the NAL unit type octet
      and payload may contain bit errors or other syntax violations.

      MANEs SHOULD set the F bit to indicate detected bit errors in the
      NAL unit.  The H.264 specification requires that the F bit is
      equal to 0.  When the F bit is set, the decoder is advised that
      bit errors or any other syntax violations may be present in the
      payload or in the NAL unit type octet.  The simplest decoder
      reaction to a NAL unit in which the F bit is equal to 1 is to
      discard such a NAL unit and to conceal the lost data in the
      discarded NAL unit.

   NRI: 2 bits
      nal_ref_idc.  0值和非零值的語義與H.264規範保持一致。換句話,00值指示NAL單元的內容不用於重建影響圖像的幀間圖像預測。這樣的NAL單元可以被丟棄而不用冒影響圖像完整性的風險。大於00的值指示NAL單元的解碼要求維護引用圖像的完整性。
      
      除了上面指定的外, 根據本RTP荷載規範, 大於00的NRI值指示相對傳輸優先級, 象編碼器決定的一樣。 MANE可以使用本信息保護更重要的NAL單元。最高的傳輸優先級是11, 依次是 10, 01;00 最低。

         註釋: 任何非零的NRI在H.264 解碼器的處理是相同的。因此,接收者在傳送NAL單元給解碼器時不必操作NRI的值。

	H.264編碼器必須根據H.264規範設置NRI值(subclause 7.4.1)當nal_unit_type 範圍的是1到12. 特別是, 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值,以下的例子可以使用並且在某些環境有效[13].其它的映射也可以,依賴於應用以及使用的H.264/AVC Annex A profile.

	註釋: 在某些profile中數據分區不可用,即 , 在Main或Baseline profiles. 因此, nal單元類型2, 3,4 只出現在視頻流符合數據分區被允許的profile情況下,不會出現在符合MAIN/Baseline profile的流中。
         
      Table 2.  編碼片和主編碼參考圖像數據分區的編碼片的NRI值的例子

      NAL Unit Type     Content of NAL unit              NRI (binary)
      ----------------------------------------------------------------
       1              non-IDR coded slice                         10
       2              Coded slice data partition A                10
       3              Coded slice data partition B                01
       4              Coded slice data partition C                01

         註釋: 像以前提起的, 非參考圖像NRI值是00.

      H.264編碼器應該設置冗餘編碼參考圖像的編碼片和編碼片分區NAL單元的NRI值爲01 (二進制格式).

      對於NAL單元類型24~29的NRI的定義在本文5.7,5.8給出。

      對於nal_unit_type範圍在13到23的NAL單元的NRI值沒有推薦的值,因爲這些值保留給ITU-T,ISO/IEC. 對於nal_unit_type爲0或30,31的NAL單元的NRI值也沒有推薦的值,因爲這些值的語義本文沒有指定。

5.4.  打包方式

   本文指定三種打包方式:

      o 單NAL單元方式
      o 非交錯方式
      o 交錯方式
   
   單NAL單元方式目標是常規的系統,該系統兼容ITU-T H.241 [15] (12.1). 非交錯方式目標是常規系統,可以不符合ITU-T H.241建議.在非交錯方式, NAL單元按照NAL單元解碼順序傳送交錯模式目標是不要求非常低端到端延遲的系統。
   交錯方式允許傳送NAL單元不按照NAL單元解碼順序。

   使用的打包方式可以通過OPTIONAL packetization-mode MIME參數的值指定或外部手段。使用的打包方式控制那個NAL單元類型在RTP荷載中允許。表3 總結對每個打包方式允許的NAL單元類型。有些NAL單元類型值(在表3中指示爲沒有定義)保留爲將來擴展. 那些類型的NAL單元不應該被髮送者發送,接受者必須忽略他們。例如:1-23, 相關的包類型"NAL unit",允許出現在 "單NAL單元方式" 和"非交錯方式", 不允許在"交錯方式".
   打包方式在第六節更詳細解釋。

   表 3.  每個打包方式允許的NAL單元類型總結(yes = 允許, no = 不允許, ig = 忽略)

      Type   Packet    Single NAL    Non-Interleaved    Interleaved
                       Unit Mode           Mode             Mode
      -------------------------------------------------------------

      0      undefined     ig               ig               ig
      1-23   NAL unit     yes              yes               no
      24     STAP-A        no              yes               no
      25     STAP-B        no               no              yes
      26     MTAP16        no               no              yes
      27     MTAP24        no               no              yes
      28     FU-A          no              yes              yes
      29     FU-B          no               no              yes
      30-31  undefined     ig               ig               ig

5.5.  解碼順序號(DON)

   在交錯打包方式, NAL單元的傳輸順序允許和NAL單元的解碼順序不同。解碼順序號(DON)是荷載結構中的一個域或一個獲得變量指示NAL單元的解碼順序。 不按解碼順序傳輸的例子和原理以及DON的使用見13節。
   
   傳輸和解碼順序的耦合由OPTIONAL sprop-interleaving-depth MIME參數控制,見下。當OPTIONAL sprop-interleaving-depth MIME 參數的值等於0 (明確或缺省) 或者外部手段不允許傳輸NAL單元順序不同於他們的解碼順序, NAL單元的傳輸順序必須和他們的解碼順序一致。當OPTIONAL sprop-interleaving-depth MIME參數的值大於0或者傳輸NAL單元與解碼序號不一致通過外部手段被允許時,

   o  在MTAP16/MTAP24中的NAL單元順序不要求是NAL單元的解碼順序
   o  在兩個連續包中的STAP-B, MTAP,FU解嵌套產生的NAL單元序號不要求是NAL單元解碼序號。

   用於單NAL單元包 STAP-A和FU-A的RTP荷載結構不包含DON.  STAP-B,FU-B結構包含DON, MTAP結構允許推導DON象5.7.2指定的一樣.

      註釋:檔FU-A出現在交錯方式,後邊總跟一個FU-B, 他設置自己的DON.

      註釋: 一個傳輸器想封裝單個NAL單元每個包並且傳輸包不按照他們的解碼順序,可以使用STAP-B包類型。

   在單個NAL單元打包方式, NAL單元的傳輸順序,由RTP順序號確定, 必須和他們的NAL單元解碼序號一致。在非交錯打包方式中, 在單NAL單元包,STAP-A,FU-A中NAL單元的傳輸順序必須和他們的NAL單元解碼順序一致.在一個STAP中的NAL單元必須按照他們的NAL單元解碼順序出現。因此,解碼順序首先由STAP隱含順序提供, 第二通過RTP序號提供(對於STAPs, FUs, 單個NAL unit包之間的)。

   對於運送在STAP-B, MTAP以及FU-B開始的一些列分片單元中的NAL單元的DON值的信令在5.7.1, 5.7.2, 指定5.8。傳輸順序中的NAL單元的第一個DON值可以設置成任何值,DON值的範圍是0到65535。到達最大值後, DON的值迴繞到0.

   包含在STAP-B, MTAP,或FU-B開始的一系列分片單元中的兩個NAL單元的解碼順序按照如下確定:
	DON(i)是索引爲i傳輸順序的解碼順序號. 函數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單元解碼順序號可以按照任何NAL單元優先。don_diff(m,n)的負值指示索引爲n的NAL單元解碼序號先於索引爲m的NAL單元。
   
   DON相關域的值(DON, DONB, and DOND; 5.7)必須使得上面指定的DON的值確定的解碼器順序號符合NAL單元解碼序號。如果兩個NAL解碼單元順序的NAL單元交換,新的順序號不符合NAL單元解碼順序,NAL單元不可以有相同的DON值. 如果在一個NAL單元流中兩個連續NAL單元的序號交換並且新的序號仍符合NAL單元解碼順序號,NAL解碼單元可以有相同的DON值。例如:當使用的視頻編碼profile允許任意分片順序, 一個編碼圖像的所有編碼片的NAL單元可以有相同的DON值。因此,相同DON值的 NAL單元可以按照任何順序解碼,有不同DON值的NAL單元應該按照上面指定的順序傳遞給解碼器。當兩個連續的NAL單元解碼順序的NAL單元有不同的DON值, 第二個NAL單元的DON應該是第一個NAL單元的DON值加1。
   
   解包過程恢復NAL單元解碼的例子在第7部分給出。

      注: 接收者不應該預測兩個解碼順序號連續的NAL的DON值的絕對差等於1,甚至在沒有錯誤的傳輸過程。沒有要求增加1,就像關聯DON的值到NAL單元的時間一樣, 不可能知道所有NAL單元是否分發給接收者。例如:一個網關可以不轉發非引用的編碼的NAL片或SEI NAL 單元,當需要轉發的網絡帶寬不足時。;另外的例子:現場廣播被預先編碼的內容不時的打斷,如廣告。預先編碼的第一個內幀圖像事先傳送使得接收端準備可用。當傳送第一個內幀時,發送者不能精確知道在解碼順序後的第一個內幀前,有多少NAL單元被編碼。因此, 預編碼片斷的第一個內幀的DON值不得不估算,當他們傳送時,因此DON中可能產生空隙。

5.6.  單個NAL單元包

   定義在此的單個NAL單元包必須只包含一個類型定義在[1]中的NAL單元。這意味聚合包和分片單元不可以用在單個NAL單元包中。一個封裝單個NAL單元包到RTP的NAL單元流的RTP序號必須符合NAL單元的解碼順序。單個NAL單元包的結構顯示在圖2。

      注: NAL單元的第一字節和RTP荷載頭第一個字節重合。

       0                   1                   2                   3
       0 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.  單個NAL單元包的RTP荷載格式。

5.7.  聚合包

   聚合包是本荷載規範的NAL單元聚合安排。本計劃的引入是反映兩個主要目標網絡差異巨大的MTU:有線IP網絡(MTU 通常被以太網的MTU限制; 大約1500 字節), 基於無線通信系統的IP或非IP (ITU-T H.324/M)網絡,它的優先傳輸最大單元是254或更少。爲了阻止連個世界媒體的轉換以及避免不必要的打包負擔,引入聚合單元安排。

   本規範定義了兩類聚合包:

   o  單時間聚合包(STAP): 聚合相同NALU時間的NAL單元。兩類STAP被定義, 一類不包括DON (STAP-A)另一類包括DON (STAP-B).

   o  多時間聚合包(MTAP): 聚合具有差異NALU時間的NAL單元. 兩個MTAP被定義, 差別在 NAL單元時戳位移長度不同。

   詞語NALU-時間被定義成如果NAL單元被傳輸他自己的RTP包中時RTP的時戳。

   運送在一個聚合包中的每個NAL單元封裝在一個聚合單元中。參見下面四個不同聚合單元和他們的特性。

   聚合包的RTP荷載格式的結構見圖3。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      圖 3.  聚合包的RTP荷載格式。

   MTAPs,STAPs公用以下打包規則:RTP時戳必須設置爲被聚合NAL單元中最早NALU時間。NAL單元類型的類型域必須被設置成適當的值,像表4描述的一樣.如果聚合NAL單元的F位是0,F位必須清除,否則,則必須被設置。 NRI的值必須是運送在聚合包中NAL單元的最大值。

      表 4.  STAPs和MTAPs的類型域

      Type   Packet    時戳位移域長度(位)   DON相關的域(DON, DONB, DOND)是否存在
      --------------------------------------------------------
      24     STAP-A       0                 no
      25     STAP-B       0                 yes
      26     MTAP16      16                 yes
      27     MTAP24      24                 yes

   RTP頭的marker位設置爲聚合包中最後NAL單元如果單獨封裝在RTP傳輸中對應Marker位的值。

   聚合包的荷載由一個或多個聚合單元組成。見5.7.1,5.7.2四個不同類型的聚合單元。一個包聚合包可以運送必要多的聚合單元; 但是, 聚合包中整個數據顯然必須適合於一個IP包,並且大小應該選擇使得結果的IP包比MTU小。一個聚合包不可以包含5.8中指定的分片單元。聚合包不可以嵌套;即,一個聚合包包含另一個聚合包。

5.7.1. 單時間聚合包

   單時刻聚合包(STAP)應該用於當聚合在一起的NAL單元共享相同的NALU時刻。STAP-A荷載不包括DON,至少包含一個單時刻聚合單元見圖4. STAP-B荷載包含一個16位的無符號解碼順序號(DON) (網絡字節序)緊跟至少一個單時刻聚合單元。見圖5.

       0                   1                   2                   3
       0 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                  |
      |                                                               |
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               :
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     圖 4.  STAP-A荷載格式

       0                   1                   2                   3
       0 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                  |
      |                                                               |
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               :
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                 圖 5.  STAP-B 荷載格式

   DON域指定STAP-B傳輸順序中第一個NAL單元的DON值. 對每個後續出現在STAP-B中的NAL單元,它的DON值等於(STAP-B中前一個NAL的DON值+1)%65535, %是取模運算。

   單時刻聚合單元有一個16位無符號大小信息(網絡字節序),他指示後續NAL單元的大小(以字節爲單位)(不包括這兩個字節,但包括NAL單元類型字節),後面緊跟NAL單元本身, 包括它的NAL單元類型字節. 單時刻聚合單元在RTP荷載中是字節對齊的,單可以不是32位字邊界對齊。圖6 表示單時刻聚合單元的結構。

       0                   1                   2                   3
       0 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                            |
      |                                                               |
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               :
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              圖 6.  單時刻聚合單元的結構


   圖 7表示一個例子--一個RTP包包含一個STAP-A. STAP包含兩個單時刻聚合單元, 在圖中用1,2標記。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      圖 7.  RTP包包含一個STAP-A. STAP包含兩個單時刻聚合單元

   圖 8 表示一個RTP包包含一個STAP-B. STAP包含兩個單時刻聚合單元, 用 1,2標記。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      圖 8.  一個RTP包包含一個STAP-B. STAP包含兩個單時刻聚合單元例子

5.7.2.  多時刻聚合包(MTAPs)

   多時刻聚合包的NAL單元荷載有16位的無符號解碼順序號基址(DONB) (網絡字節序)以及一個或多個多時刻聚合單元,如圖9表示。DONB 必須包含MTAP中NAL單元的第一個NAL的DON的值。

      註釋:NAL解碼順序中的第一個NAL單元不必要是封裝在MTAP中的第一個NAL單元。

       0                   1                   2                   3
       0 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                  |
      |                                                               |
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               :
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

           圖 9. MTAP的NAL單元荷載格式

   本規範定義兩個不同多時刻聚合單元。兩個都有16位的無符號大小信息用於後續NAL單元(網絡字節序),一個8位無符號解碼序號差值(DOND), 和n位 (網絡字節序) 時戳位移(TS 位移)用於本NAL單元,n可以是16/24. 不同MTAP類型的選擇是應用相關的(MTAP16/MTAP24): 時戳位移越大, MTAP的靈活性越大, 但是負擔也越大。

   MTAP16/MTAP24多時刻聚合單元的結構分別在圖 10 ,11表示。一個包中的聚合單元的開始/結束不要求位於32位的邊界。跟隨NAL單元的DON 等於(DONB + DOND) % 65536,  %代表取摸操作. 本文沒有指定MTAP內的NAL單元如何排序,但大多數情況,應該使用NAL單元解碼順序。
   
   時戳位移域必須設置成等於以下公式的值:如果NALU-time大於等於包的RTP時戳,則時戳位移等於(NALU-time - 包的RTP時戳).
   如果NALU-time小於包的RTP時戳,則時戳位移等於 NALU-time + (2^32 - 包的RTP時戳).

       0                   1                   2                   3
       0 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                         |
      |                                                               |
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               :
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  圖 10.  MTAP16多時刻聚合單元

       0                   1                   2                   3
       0 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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      :        NALU unit size         |      DOND     |  TS offset    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         TS offset             |                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
      |                              NAL unit                         |
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               :
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                 圖 11.  MTAP24多時刻聚合單元

   一個MTAP中的最早的聚合單元時戳位移必須爲0。因此, MTAP的RTP時戳和最早NALU-time相同.

      註釋: 最早多時刻聚合單元是MTAP中所有聚合單元的擴展RTP時戳中的最小者,如果聚合單元封裝在單個NAL單元包中。擴展時戳是有多於32位的時戳,有能力計算時戳域的饒回,因此時戳如果繞回能夠確定時戳的最小值。這樣的“最早“聚合單元可以不是封裝在MTAP中的第一個聚合單元,最早NAL單元不必和NAL解碼順序的第一個NAL單元相同。

   圖 12 表示一個例子,一個RTP包包含一個多時刻MTAP16類型的聚合包,包括兩個多時刻聚合單元,分別用1,2標記。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      圖 12. 一個RTP包包含一個多時刻MTAP16類型的聚合包,包括兩個多時刻聚合單元

   圖 13 表示一個例子,一個RTP包包含一個多時刻MTAP24類型的聚合包,包括兩個多時刻聚合單元,分別用1,2標記。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      圖 13.  RTP包包含一個多時刻MTAP24類型的聚合包,包括兩個多時刻聚合單元

5.8.  分片單元 (FUs)

   本荷載類型允許分片一個NAL單元到幾個RTP包中。在應用層這樣做比依賴於底層(IP)的分片有以下好處:

   o  荷載格式有能力傳輸NAL單元大於64K字節的單元通過IPv4網絡,或許存在預編碼的視頻,特別在高清格式 (每個圖像的分片數目有限制,導致每個圖像的NAL單元數目的限制, 從而導致大的 NAL單元).

   o  分派機制允許分片單個圖像並且採用一般向前的糾錯像12.5描述的那樣.

   分片只定義於單個NAL單元不用於任何聚合包。NAL單元的一個分片由整數個連續NAL單元字節組成. 每個NAL單元字節必須正好是該NAL單元一個分片的一部分。相同NAL單元的分片必須使用遞增的RTP序號連續順序發送(第一和最後分片之間沒有其他的RTP包)。相似, NAL單元必須按照RTP順序號的順序裝配。

   當一個NAL單元被分片運送在分片單元(FUs)中時,被引用爲分片NAL單元。STAPs,MTAP不可以被分片。 FUs不可以嵌套。即, 一個FU 不可以包含另一個FU.

   運送FU的RTP時戳被設置成分片NAL單元的NALU時刻.

   圖 14 表示FU-A的RTP荷載格式。FU-A由1字節的分片單元指示,1字節的分片單元頭,和分片單元荷載組成。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      圖 14.  FU-A的RTP荷載格式

   圖 15 表示FU-B的RTP荷載格式. FU-B由1字節的分片單元指示,1字節的分片單元頭,和解碼順序號(DON)以及分片單元荷載組成。

       0                   1                   2                   3
       0 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        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          圖 15.  FU-B的RTP荷載格式

   對於分片NAL單元的第一個分片如果用於交錯打包方式,則必須使用NAL單元類型FU-B。NAL單元類型FU-B MUST不可以用於其他情況。換句話, 在交錯打包方式,每個被分片的NALU,FU-B作爲第一個分片,後面跟隨的是一個或多個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 bit
      當設置成1,開始位指示分片NAL單元的開始。當跟隨的FU荷載不是分片NAL單元荷載的開始,開始位設爲0。
   E: 1 bit
      當設置成1, 結束位指示分片NAL單元的結束,即, 荷載的最後字節也是分片NAL單元的最後一個字節。當跟隨的FU荷載不是分片NAL單元的最後分片,結束位設置爲0。
   R: 1 bit
      保留位必須設置爲0,接收者必須忽略該位。
      
   Type: 5 bits
      NAL單元荷載類型定義在[1]的表7-1.

   FU-B中DON的值的選擇在5.5已經描述.

      注: FU-B中的DON域允許網關分片NAL單元到FU-B而不用組織進來的NAL單元到NAL單元解碼順序。

   一個分片單元不可以傳輸在一個FU中; 即, 開始位和結束位不可以被同時設置在同一個FU頭中。

   FU荷載由分片NAL單元的荷載分片組成,使得如果連續FU的分片單元荷載順序連接, 可以重構分片NAL單元的荷載。NAL單元分片的類型字節不包括,就像在分片單元荷載中一樣,但是分片單元的NAL單元的類型信息運送FU指示字節的F和NRI域以及FU頭的類型域。一個FU荷載可以有任意字節也可以爲空。

      註釋: 空的FUs允許減少某類發送者在幾乎無丟失環境中的延遲。這些發送者特點是他們的NALU完全產生前,可以打包NALU分片,因此,在NALU大小未知之前。如果零長度分片不被允許,發送者不得不產生至少一位數據在當前分片被髮送前. 由於H.264的特性, 有時幾個宏快佔據0位,這是不希望的並且增加延遲。但是, (潛在)使用0長度的NALU應該仔細權衡增加NALU丟失的風險,因爲增加了傳輸包。

   如果一個分片單元丟失,接收者應該丟棄後續的所有分片單元對應於相同分片NAL單元的傳輸順序的分片。

   終端或MANE中的接收者可以聚合前一個NAL單元的n-1分片到一個(不完全的) NAL單元,甚至分片n沒有接收到. 這種情況下,NAL單元的forbidden_zero_bit必須被設置成1指示語法違背.

6.  打包規則

   打包方式在5.2節介紹.  對於多於一個打包方式的公共打包規則在6.1節指定. 單個NAL單元方式的打包規則,非交錯方式,交錯方式的打包規則分別在6.2, 6.3,6.4節指定。

6.1.  公共打包規則

   不管使用那種打包方式,所有發送者必須遵守以下打包規則:

   o  屬於同一編碼圖像(共享相同RTP時戳值)的編碼NAL單元片斷或者編碼數據分區NAL單元片斷可以按照定義在[1]中的應用Profile允許的任何順序發送; 但是,對於延遲敏感的系統,他們應該按照他們原始編碼順序發送,以減少延遲。注意:編碼順序不必要是掃描順序,而是NAL包對RTP協議棧可用的順序。

   o  參數集根據8.4節給定的規則和建議處理。

   o  MANEs 不可以重複任何NAL單元,除了順序或圖像參數集NAL單元,同樣本文或者H.264規範也沒有提供手段識別重複的NAL單元。順序和圖像參數集NAL單元可以重複使得他們的糾錯接收更可靠,但是,任何這樣的重複不可以影響任何活動順序或圖像參數集的內容。重複應該在應用層進行,不應通過複製RTP包進行(相同序號)。                          
      
   使用非交錯方式和交錯方式的發送者必須遵守以下打包規則:

   o  MANEs可以轉換單個NAL單元包到一個聚合包,轉換一個聚合包到幾個單個NAL單元包,或在RTP轉換器中混合兩個概念。RTP轉換器至少應該考慮如下參數:路徑MTU大小, 不平等的保護機制(即,根據RFC 2733通過基於包的FEC,特別對於順序和圖像參數集NAL單元以及編碼片斷數據分區NAL單元),系統可以忍受的延遲以及接收者緩衝能力。
      注:RTP轉換器要求按照每個RFC3550處理RTCP.

6.2.  單個NAL單元模式

   本方式應用在OPTIONAL打包方式MIME參數值等於0,不包含打包方式,或者沒有外部手段指示其他的打包方式的時候。所有的接收者必須支持本方式。它主要用於低延遲應用(和使用ITU-T H.241建議兼容的系統)。(見12.1節). 只有單個NAL單元包可以用在這種方式。STAPs, MTAPs, and FUs 不可以使用。單個NAL單元的傳輸順序必須和NAL解碼順序一致。

6.3.  非交錯方式

   本方式應用在OPTIONAL打包方式MIME參數值等於1或者改方式被外部的手段打開時。本方式應該被支持。它主要用於低延遲應用。本方式只允許單個NAL單元包, STAP-As, FU-As包。STAP-Bs, MTAPs,FU-Bs不可以使用。NAL單元的傳輸順序必須和NAL單元解碼順序一致。

6.4.  交錯方式

   本方式應用在OPTIONAL打包方式MIME參數值等於2或者改方式被外部的手段打開時。有些接收者可以支持本方式。可以使用 STAP-Bs, MTAPs, FU-As,FU-Bs。STAP-As 和單個NAL單元包不可以使用。包和NAL單元傳輸順序的限制在5.5節指定。
   
7.  打包過程 (信息)

   打包過程是實現相關的。因此,下面的描述應該被看成合適實現的例子。其他的方案也可以使用。相關描述算法的優化也是可能的。7.1演示單個NAL單元和非交錯打包方式的打包過程,7.2描述交錯方式的打包過程。7.3 包括附加的封裝指導對於智能接收者。
   
   所有相關於緩衝區管理正常的RTP機制也適用。特別的,重複的過期的RTP包(由RTP序號/時戳指示)被刪除。 爲了確定精確的解碼時間, 如可能的延遲因素也被允許爲了正確的流之間的同步。

7.1.  單個NAL單元和非交錯方式

   接收者包括一個接收緩衝區以補償傳輸延遲和抖動。接收者存儲進來的包按照接收順序在接收緩衝區中。包被解封裝按照RTP序號的順序。如果封裝包是一個單個NAL單元包,包含在包中的NAL單元直接傳遞給解碼器。如果解封裝的包是一個STAP-AI, 包含在包中的NAL單元按照他們在包中的封裝順序傳遞給解碼器。如果解封裝包是一個FU-A, 所有的分片NAL單元單分片連接在一起傳遞給解碼器。
   
      信息: 如果解碼器支持任意分片順序,編碼的圖像片可以按照任意順序傳送給解碼器而不管他們的接收傳送順序。

7.2.  交錯方式

   這些打包規則後面的一般概念是重新排序NAL單元從傳輸順序到NAL單元解碼順序。

   接收者包括一個接收緩衝區以補償傳輸延遲抖動以及重新排序包從傳輸順序到NAL單元解碼順序。本部分,接收者操作的描述假設沒有傳輸延遲抖動。爲了和實際的差異,一個接收緩衝區也用於補償傳輸延遲抖動,接收者者本部分調用解交錯緩衝區。接收者應該準備傳輸延遲抖動;即, 或者保留單獨的緩衝區用於傳輸延遲抖動緩衝和解交錯緩衝或者使用接收緩衝用於傳輸延遲抖動和解交錯。而且, 接收者應該考慮傳輸延遲抖動在緩衝區操作時,即,在開始解碼和回放前增加緩衝區。

   本部分組織如下: 7.2.1 描述如何計算交錯緩衝區的大小. 7.2.2指定接收過程如何組織接收到的NAL單元到NAL解碼順序。
   
7.2.1.  解交錯緩衝區的大小

   當 SDP Offer/Answer 模型或其他任何能力交換過程被使用時, 接收流的屬性應該使得接收者的能力不被超過。在 SDP Offer/Answer 摸型行中, 接收者可以指示它的能力以分配一個解交錯緩衝區使用deintbuf-cap MIME 參數。發送者指示解交錯緩衝區大小的要求使用sprop-deint-buf-req MIME參數. 因此,推薦設置解交錯緩衝區大小(字節數目)等於或大於sprop-deint-buf-req MIME 參數指定的值.  參見 8.1 得到更多信息關於 deint-buf-cap和sprop-deint-buf-req MIME參數,8.2.2 關於他們在SDP Offer/Answer模型中的使用。

   在會話建立中一個公佈的會話描述被使用,sprop-deint-buf-req MIME參數指定交錯緩衝大小的要求。因此,推薦設置解交錯緩衝區大小(字節位單位)等於或大於sprop-deint-buf-req MIME 參數的值.

7.2.2.  解交錯過程

   在接收者中有兩個緩衝狀態: 初始緩衝和正在播放緩衝。初始緩衝發生在RTP會話被初始化時。初始緩衝後,解碼和播放開始了, 使用緩衝-播放模型。

   不管緩衝的狀態,接收者存儲進來的NAL單元按照接收順序,在解交錯緩衝區中。聚合包的 NAL單元存儲在單個解交錯緩衝區中DON的值被計算爲所有NAL單元存儲。

   描述在下面的接收操作需要以下的函數常數幫助:

   o  函數AbsDON在8.1指定.

   o  函數don_diff在 5.5 指定.

   o  常數 N 是 OPTIONAL sprop-interleaving-depth MIME 類型參數的值( 8.1)加1.

   初始緩衝持續直到以下條件完成:

   o  在解交錯緩衝區中有 N VCL NAL單元。

   o  如果sprop-max-don-diff存在, don_diff(m,n)大於sprop-max-don-diff的值, 其中 n 對應所有接收到的NAL單元中最大AbsDON值的NAL單元,m 對應所有接收到的NAL單元中最小AbsDON值的NAL單元。

   o  初始緩衝區已經持續時間等於或大於 OPTIONAL sprop-init-buf-time MIME 參數指定的值.

   要從解交錯緩衝區刪除的NAL單元的確定如下:

   o  如果解交錯緩衝區包含至少N 個VCL NAL單元,NAL單元被從解交錯緩衝區移出傳遞給解碼器按照下面指定的次序直到緩衝區中包含N-1 VCL NAL 單元。
      
   o  如果sprop-max-don-diff存在, 所有的NAL單元 m,他們的don_diff(m,n)大於sprop-max-don-diff的從解交錯緩衝區移出傳送給解碼器按照下面指定的順序。在此, n 對應所有接收到的NAL單元中最大AbsDON值的NAL單元。

   NAL單元傳遞給解碼器的順序指定如下:

   o  讓PDON是一個變量RTP會話開始時初始化爲0。

   o  對於每個關聯DON的NAL單元, 按如下計算一個DON距離。如果NAL單元的DON大於PDON的值, DON距離等於DON-PDON.否則DON距離等於 65535 - PDON + DON + 1.

   o  NAL單元分發給解碼器按照DON距離遞增的順序。如果幾個NAL單元有相同的DON距離,則他們可以按照任意順序遞交給解碼器.

   o  當一定數目的NAL單元傳遞給解碼器, PDON的值設置爲傳送給解碼器最後一個NAL單元的DON值。

7.3. 附加打包規則

   以下附加打包規則可用於實現一個可操作的H.264打包器:

   o  智能RTP接收者 (即在網關中) 可以識別丟失的編碼片斷數據分區A (DPAs). 如果發現丟失的DPA,網關可以決定不發送對應的編碼片斷數據分區B和C,因爲對於H.264解碼器他們的信息是無意義的。這樣通過丟棄無用的包而不用分析複雜的位流,一個MANE可以減少網絡負擔。

   o  智能RTP接收者(即在網關中) 可以識別丟失的FU.  如果發現丟失一個FU, 網關可以決定不發送同一個分片NAL的後續FU因爲對於H.264解碼器他們的信息是無意義的.這樣通過丟棄無用的包而不用分析複雜的位流,一個MANE可以減少網絡負擔。 

   o  不得不丟棄包或NALU的智能接收者應該首先丟棄所有NAL單元類型中NRI值等於0的包/NALU. 這樣最小化用戶體驗的影響並保持參考圖像完整。如果更多的包不得不被丟棄,則NRI值低的包應該在NRI值高的前面被丟棄。但是,丟棄任何NRI值大於0的包可能導致解碼器飄移應該被避免。

 

 

所有NAL單元有一個單個NAL單元類型字節,他也作爲本RTP荷載格式的荷載頭.後面立即跟隨NAL單元的荷載。

   NAL單元類型字節的語法語義在[1]中指定,但是NAL單元類型的基本屬性總結如下。NAL單元類型字節格式如下:
      +---------------------+
      |0|1|2|3|4|5|6|7|
      +-+-+-+-+-+-+-+-+
      |F|NRI|  Type         |
      +---------------------+

   NAL單元類型字節部件的語義在H.264規範中制定, 簡要描述如下.

   F: 1 bit
      forbidden_zero_bit.  H.264規範聲明設置爲1指示語法違例。

   NRI: 2 bits
      nal_ref_idc.  00值指示NAL單元的不用於幀間圖像預測的重構參考圖像。這樣的NAL單元可以被丟棄而不用冒參考圖像完整性的風險。大於0的值指示NAL單元的解碼要求維護參考圖像的完整性。

   Type: 5 bits
      nal_unit_type.  本部件指定NAL單元荷載類型定義在[1]的表 7-1中和本文後面。爲了參考所有當前定義的NAL單元類型和他們的語義,參考 [1]的7.4.1.

   本文引入新的NAL單元類型,在5.2演示.  定義在本文的NAL單元類型在[1]中標記爲未指定。但是,本規範擴展了F和 NRI的語義,象5.3描述的那樣.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章