メインコンテンツまでスキップ

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 の値に設定する.