7.2.2. De-Interleaving Process (デインタリーブ処理)
7.2.2. De-Interleaving Process (デインタリーブ処理)
受信者には 2 つのバッファリング状態がある: 初期バッファリング (initial buffering) と再生中バッファリング (buffering while playing). 初期バッファリングは RTP セッションが初期化されたときに発生する. 初期バッファリングの後にデコードと再生が開始され, 再生中バッファリングモードが用いられる.
バッファリング状態にかかわらず, 受信者は到着した NAL ユニットを受信順に次のとおりデインタリーブバッファに格納する. 集約パケット内の NAL ユニットは個別にデインタリーブバッファに格納する. 各 NAL ユニットについて DON (decoding order number, デコード順序番号) の値を計算し格納する.
以下の関数と定数を用いて受信者の動作を説明する:
-
関数
AbsDONはセクション 8.1 で規定される. -
関数
don_diffはセクション 5.5 で規定される. -
定数 N は, 任意の
sprop-interleaving-depthメディアタイプパラメータ (セクション 8.1 参照) の値に 1 を加えたものである.
初期バッファリングは, 次のいずれかの条件が満たされるまで続く:
-
デインタリーブバッファに N 個以上の VCL NAL ユニット (VCL NAL units) がある.
-
sprop-max-don-diffが存在し,don_diff(m,n)がsprop-max-don-diffの値より大きい. ここで n は受信した NAL ユニットのうちAbsDONが最大のもの, m は最小のものに対応する. -
初期バッファリングの継続時間が, 任意の
sprop-init-buf-timeメディアタイプパラメータの値以上である.
デインタリーブバッファから除去する NAL ユニットは次のとおり決まる:
-
デインタリーブバッファに少なくとも N 個の VCL NAL ユニットがある場合, 後述の順序でデインタリーブバッファから NAL ユニットを除去してデコーダに渡し, バッファ内の VCL NAL ユニットが N-1 個になるまで繰り返す.
-
sprop-max-don-diffが存在する場合,don_diff(m,n)がsprop-max-don-diffより大きいすべての NAL ユニット m をデインタリーブバッファから除去し, 後述の順序でデコーダに渡す. ここで n はデインタリーブバッファ内の NAL ユニットのうちAbsDONが最大のものに対応する.
NAL ユニットをデコーダに渡す順序は次のとおり規定される:
-
変数 PDON を RTP セッション開始時に 0 で初期化する.
-
DON の値に関連付けられた各 NAL ユニットについて, 次のように DON 距離 (DON distance) を計算する. NAL ユニットの DON が PDON より大きければ, DON 距離は DON から PDON を引いた値である. そうでなければ, DON 距離は 65535 から PDON を引き, DON を加え, さらに 1 を加えた値である.
-
NAL ユニットは DON 距離の昇順でデコーダに渡す. 複数の NAL ユニットが同一の DON 距離を共有する場合, 任意の順序で渡してもよい.
-
所望の数の NAL ユニットをデコーダに渡したら, PDON を最後に渡した NAL ユニットの DON の値に設定する.