5.8. Fragmentation Units (FUs) (フラグメント化ユニット)
5.8. Fragmentation Units (FUs) (フラグメント化ユニット)
本ペイロード型は, 1 つの NAL ユニットを複数の RTP パケットに分割できる。下位層 (例: IP) の分割に頼らずアプリケーション層で行う利点は次のとおりである。
- 事前録画映像などで現れ得る, IPv4 上で 64 kbyte を超える NAL ユニットを運べる (1 画像あたりのスライス数に上限があり, 画像あたりの NAL ユニット数に上限が生じ, 大きな NAL ユニットになり得る)。
- 分割機構により 1 つの NAL ユニットを分割し, セクション 12.5 で述べる汎用前方誤り訂正 (Forward Error Correction, FEC) を適用できる。
分割は単一 NAL ユニットに対してのみ定義され, 集約パケットには適用されない。NAL ユニットのフラグメントは, 当該 NAL ユニットの連続する整数個のオクテットからなる。NAL ユニットの各オクテットは, 当該 NAL ユニットのちょうど 1 つのフラグメントに属さなければならない (MUST)。同一 NAL ユニットのフラグメントは, RTP シーケンス番号が昇順になるよう連続して送信しなければならない (MUST) (最初と最後のフラグメントの間に, 同一 RTP パケットストリーム内の他の RTP パケットを送ってはならない)。同様に, NAL ユニットの再構成は RTP シーケンス番号順で行わなければならない (MUST)。
NAL ユニットが分割されフラグメント化ユニット (FU) 内で運ばれる場合, それをフラグメント化 NAL ユニットという。STAP および MTAP を分割してはならない (MUST NOT)。FU を入れ子にしてはならない (MUST NOT)。すなわち, FU が別の FU を含んではならない。
FU を運ぶ RTP パケットの RTP タイムスタンプは, フラグメント化された NAL ユニットの NALU-time に設定する。
図 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 を示す。FU-B は, 1 オクテットのフラグメント化ユニットインジケータ, 1 オクテットのフラグメント化ユニットヘッダ, ネットワークバイト順のデコード順序番号 (DON), およびフラグメント化ユニットペイロードからなる。言い換えれば, 追加の DON フィールドを除き FU-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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FU indicator | FU header | DON |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| FU payload |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :...OPTIONAL RTP padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
図 15. FU-B の RTP ペイロード形式
インターリーブパケット化モードでは, フラグメント化 NAL ユニットの最初のフラグメント化ユニットに NAL ユニット型 FU-B を用いなければならない (MUST)。FU-B は他のいかなる場合にも用いてはならない (MUST NOT)。すなわち, インターリーブモードでは, 分割される各 NAL ユニットは最初に FU-B を持ち, 続けて 1 つ以上の FU-A フラグメントが続く。
FU インジケータオクテットの形式は次のとおりである。
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
FU インジケータオクテットの type フィールドの値 28 および 29 は, それぞれ FU-A および FU-B を識別する。F ビットの使用はセクション 5.3 に述べる。NRI フィールドの値は, フラグメント化された NAL ユニットの NRI フィールドの値に従って設定しなければならない (MUST)。
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 でなければならず (MUST), 受信者は無視しなければならない (MUST)。
Type: 5 ビット
[1] の表 7-1 で定義される NAL ユニットペイロード型。
FU-B における DON の値はセクション 5.5 に従って選ぶ。
参考注: FU-B の DON により, ゲートウェイは着信 NAL ユニットを NAL ユニットデコード順に並べ替えずに NAL ユニットを FU-B に分割できる。
フラグメント化 NAL ユニットを 1 つの FU で送ってはならない (MUST NOT)。すなわち, 同一 FU ヘッダでスタートビットとエンドビットの両方を 1 にしてはならない (MUST NOT)。
FU ペイロードはフラグメント化 NAL ユニットのペイロードの断片からなり, 連続する FU の FU ペイロードを順に連結すればフラグメント化 NAL ユニットのペイロードを復元できる。フラグメント化 NAL ユニットの NAL ユニット型オクテット自体は FU ペイロードには含めず, その情報はフラグメント化ユニットの FU インジケータオクテットの F および NRI フィールドと FU ヘッダの type フィールドで伝える。FU ペイロードは任意個のオクテットとでき (MAY), 空でもよい (MAY)。
参考注: 空の FU を許すのは, ほぼ無損失環境で特定クラスの送信端の遅延を減らすためである。そうした送信端は, NAL ユニットが完全に生成される (したがってサイズが分かる) 前に NAL ユニットのフラグメントをパケット化する。ゼロ長の NAL フラグメントを禁止すると, 送信端は現在のフラグメントを送る前に次のフラグメントの少なくとも 1 ビットを生成しなければならない。H.264 では複数のマクロブロックが 0 ビットを占めることがあり, これは望ましくなく遅延を増やす。ただし, (潜在的な) ゼロ長 NAL フラグメントの使用は, 伝送に用いる追加パケットによる NAL ユニットの少なくとも一部の損失リスク増加と慎重に天秤にかけるべきである。
フラグメント化ユニットが失われた場合, 受信者は, 同一フラグメント化 NAL ユニットに対応する送信順で後続する全フラグメント化ユニットを破棄すべきである (SHOULD)。
エンドポイントまたは MANE 内の受信者は, 当該 NAL ユニットのフラグメント n が受信できなくても, 当該 NAL ユニットの最初の n-1 個のフラグメントを (不完全な) NAL ユニットに集約してもよい (MAY)。この場合, 当該 NAL ユニットの forbidden_zero_bit は構文違反を示すため 1 に設定しなければならない (MUST)。