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

付録 A. パケットあたりの再送回数の制御方法 (Appendix A. How to Control the Number of Rtxs. per Packet)

可能な限り良い伝送を達成するためのパケットあたりの再送回数 (rtxs.) を求めることは難しい作業である. もちろん絶対最小は 1 であるべきであり, そうでなければ本ペイロード形式を用いるべきではない. さらに, 公開時点では著者らは, 最良性能のためにパケットあたりに用いるべき再送回数に関する研究を知らなかった. 実装者および研究者の助けとするため, 本節は所定の再送回数を達成するのに必要なバッファ時間の推定値を述べる. この時間が計算されたら, 本ドキュメントで定義される SDP パラメータ "rtx-time" を通じてクライアントに通知できる.

A.1. シナリオと仮定

  • 遅延上界が緩いストリーミングシナリオ. クライアントとサーバに, SDP のパラメータ "rtx-time" で示されるバッファ空間が与えられる.

  • RTP AVPF プロファイルを SSRC 多重化再送方式で使用: オリジナルパケット用に 1 SSRC, 再送パケット用に 1 SSRC.

  • SR および RR のデフォルト RTCP 帯域共有, すなわち SR+RR = 0.05. 送信者は 2, 受信者は 1. セッション参加者のうち送信者の割合が 1/4 を超えるため, 受信者と送信者は RTCP 帯域共有を均等に 1/3 ずつ得る.

  • avg-rtcp-size はおおよそ 120 オクテットで近似する. これは SSRC ごとに 1 つずつ 2 つの SR の平均を切り上げた値であり, IPv6/UDP/SR/SDES (CNAME 付き) にそれぞれ 40/8/28/32 オクテット, よって各 105 オクテット, および RR が IPv6/UDP/2*RR/SDES で 40/8/64/32 オクテット, 合計 157 オクテット. 送信者と受信者が RTCP 帯域を均等に共有するため, avg-rtcp-size = (157+105+105)/3 = 117.3 ≈ 120 オクテット. この値の重要な特性は 100 オクテットを超えることであり, 典型的構成の代表的な数値に見える.

  • 用いるプロファイルは AVPF [1] で, 再送要求に汎用 NACK を用いる. これは 1 つの NACK に 16 オクテットのオーバーヘッドを加え, 追加の NACK フィードバック制御情報 (FCI) フィールドごとに 4 オクテットを加える.

  • 各パケットが受信される前に, 利用可能な再送回数 N をすべて使い切る最悪ケースを仮定する. すなわちパケットの再送を最大 2 回まで要求できるなら, 当該パケットを要求する汎用 NACK レポートブロックが 2 つの連続する RTCP 複合で送られる, 同様に 10 回まで再送を要求できるなら汎用 NACK が 10 回送られる. この仮定により, N*RTCP 間隔 (秒) 経過後, RTCP パケットサイズはおおよそ一定となり, すなわち avg-rtcp-size = 120 + (receiver-RTCP-bw-share)*(12 + 4*N) となる. 本ケースでは受信者 RTCP 帯域共有は 1/3 であるため, avg-rtcp-size = 124 + 4*N/3 である.

  • 近似が難しく実装依存になりうる遅延パラメータが 2 つある. ここでは特定の値を割り当てず明示的に列挙する: 一つはパケット損失検出時間 (T2), もう一つはフィードバック処理および再送のキューイング時間 (T5) である. 実装者はこの 2 パラメータに適切な値を割り当てなければならない.

図示すると次のとおりである.

        Sender
+-+---------------------------------^-----\-----------------
\ \ / \
\ \ | |
SN=0 \ \ SN=1 / \ RTX(SN=0)
\ \ / \
X \ / \
`. / \
\ / \
\ | |
\ / \ ......
\ / \
-------------V----D--------/-----------------------V--------
T1 T2 T3 T4 T5 T1 ........
Receiver

凡例 (Legend):

  • DL: 下りリンク (client->server)
  • UL: 上りリンク (server->client)
  • 時間の単位は秒, s.
  • ビットレートの単位はビット毎秒, bps.

DL 伝送時間: T1 = physical-delay-DL + tx-delay-DL (=avg-pkt-size/DL-bitrate) + interarrival-delay-jitter

パケット損失検出までの時間: T2 = pkt-loss-detect-time

パケット損失の報告までの時間: T3 = time-to-next-rtcp-report

UL 伝送時間: T4 = physical-delay-UL + transmission-delay-UL + interarrival-delay-jitter

再送処理時間: T5 = feedback-processing-time + rtx-queuing-time

A.2. 目的

各パケットに対して所定の再送回数 N を可能にするためにストリーミングサーバが用いるバッファ時間 T() の推定値を求める. クライアントが T1 秒遅れてバッファリングを開始すると仮定すれば, この時間はサーバとクライアントでおおよそ等しい.

A.3. 解法

まず, 再送 1 回の推定値 T(1)=T を求める.

T = T1 + T2 + T3 + T4 + T5

T1 + T4 ~= RTT であるから,

T = RTT + T2 + T3 + T5

T3 の最悪ケースは, 報告が RTCP 間隔全体待たなければならず, 最大ランダム化係数 1.5 が適用されると仮定することである. したがって, 後続のバースト回避の補償を適用した後 (RTP [3] の付録 A.7 参照), T3 = 1.5/1.21828*RTCP-Interval となる. よって,

T = RTT + 1.2312*RTCP-Interval + T2 + T5

一方, RTCP-Interval = avg-rtcp-size*8*(senders + receivers)/(RR+RS). 本シナリオでは sender + receivers = 3, RR+RS は受信者レポートと送信者レポートの帯域共有であり, 本ケースではデフォルトのセッション帯域 bw の 5% に等しい. 平均 RTCP パケットサイズ avg-rtcp-size = 120 オクテットと仮定する. よって,

T = RTT + 1.2312*avg-rtcp-size*8*3/(0.05*bw) + T2 + T5

が再送 1 回の場合である.

N 回の再送を可能にするには, ストリーミングサーバまたはクライアントで利用可能なバッファ時間はおおよそ次のとおりである.

T(N) = N*(RTT+1.2312*avg-rtcp-size*8*3/(0.05*bw) + T2 + T5)

ここで, 上に従い,

avg-rtcp-size = 120 + (receiver-RTCP-bw-share)*(12 + 4*N)
= 120 + (1/3)*(12 + 4*N)
= 124 + 4*N/3.

A.4. 数値

T2 と T5 の影響を無視し, すなわちすべての損失が即座に検出され, フィードバック処理または再送キューイングによる追加遅延がないと仮定すると, N の異なる値に対する次のバッファ時間が得られる.

複数の汎用 NACK を含む RTCP, 可変パケットサイズ = 124 + 4*N/3 オクテット

|============|=====|======================================|
| RTP BW | RTT | N value |
|============|=====| 1 2 5 7 10 |
|======================================|

64000 0,05 1,21 2,44 6,28 8,97 13,18
128000 0,05 0,63 1,27 3,27 4,66 6,84
256000 0,05 0,34 0,68 1,76 2,50 3,67
512000 0,05 0,19 0,39 1,00 1,43 2,09
1024000 0,05 0,12 0,25 0,63 0,89 1,29
5000000 0,05 0,06 0,13 0,33 0,46 0,66
10000000 0,05 0,06 0,11 0,29 0,41 0,58

64000 0,2 1,36 2,74 7,03 10,02 14,68
128000 0,2 0,78 1,57 4,02 5,71 8,34
256000 0,2 0,49 0,98 2,51 3,55 5,17
512000 0,2 0,34 0,69 1,75 2,48 3,59
1024000 0,2 0,27 0,55 1,38 1,94 2,79
5000000 0,2 0,21 0,43 1,08 1,51 2,16
10000000 0,2 0,21 0,41 1,04 1,46 2,08

64000 1 2,16 4,34 11,03 15,62 22,68
128000 1 1,58 3,17 8,02 11,31 16,34
256000 1 1,29 2,58 6,51 9,15 13,17
512000 1 1,14 2,29 5,75 8,08 11,59
1024000 1 1,07 2,15 5,38 7,54 10,79
5000000 1 1,01 2,03 5,08 7,11 10,16
10000000 1 1,01 2,01 5,04 7,06 10,08

汎用 NACK を考慮しない場合の誤差を定量化するには, 同じ数値を汎用 NACK の寄与を無視し avg-rtcp-size ≈ 120 オクテットとした場合でも計算できる. 下表から分かるように, 低い帯域値および再送回数が多い場合, バッファ推定誤差は 1〜1.5 秒 (5〜10%) になりうる. 本ケースではこの効果は小さい. それでも特定シナリオでは慎重に評価すべきであり, そのため式に含まれている.

汎用 NACK なし RTCP, 固定パケットサイズ ≈ 120 オクテット

|============|=====|======================================|
| RTP BW | RTT | N value |
|============|=====| 1 2 5 7 10 |
|======================================|

64000 0,05 1,16 2,32 5,79 8,11 11,58
128000 0,05 0,60 1,21 3,02 4,23 6,04
256000 0,05 0,33 0,65 1,64 2,29 3,27
512000 0,05 0,19 0,38 0,94 1,32 1,89
1024000 0,05 0,12 0,24 0,60 0,83 1,19
5000000 0,05 0,06 0,13 0,32 0,45 0,64
10000000 0,05 0,06 0,11 0,29 0,40 0,57

64000 0,2 1,31 2,62 6,54 9,16 13,08
128000 0,2 0,75 1,51 3,77 5,28 7,54
256000 0,2 0,48 0,95 2,39 3,34 4,77
512000 0,2 0,34 0,68 1,69 2,37 3,39
1024000 0,2 0,27 0,54 1,35 1,88 2,69
5000000 0,2 0,21 0,43 1,07 1,50 2,14
10000000 0,2 0,21 0,41 1,04 1,45 2,07

64000 1 2,11 4,22 10,54 14,76 21,08
128000 1 1,55 3,11 7,77 10,88 15,54
256000 1 1,28 2,55 6,39 8,94 12,77
512000 1 1,14 2,28 5,69 7,97 11,39
1024000 1 1,07 2,14 5,35 7,48 10,69
5000000 1 1,01 2,03 5,07 7,10 10,14
10000000 1 1,01 2,01 5,04 7,05 10,07