Slingbox のストリーミング分析

Slingbox を試用する機会を得たので実機を用いて簡単にストリーミング時のトラフィック分析を行った。 特に利用可能な帯域を一時的に制限し、そこから復元するときの挙動に注目した。 Slingbox はそうした帯域の変化に対して、ストリーミングサービスとしては一般的と思われる適応的な送出量制御を行っていた。 何種類かの帯域制限実験を通して、この適応制御に加えられたと思われる二つの工夫が観測された。 一つは利用可能な帯域が一定量を下回った場合に「様子見」をすることであり、不用意に要求帯域を高くしすぎてはバースト的なロストによる急激な帯域低下といった乱高下を防ぐためと思われる。 もう一つは前回視聴終了時に利用可能だった帯域数値を記憶し、次回視聴はその値でまず送出を試みることである。 どちらもより安定した、より良いユーザ体験を提供するための工夫と思われる。

Fumiya Senoo, Yutaka Yasuda
Kyoto Sangyo University
Apr. 2011


実験の概要

目的

インターネット上でのビデオストリーミングでは使用可能な帯域が不安定なため、一般にストリーミングの送出量はその時利用可能な帯域に応じて変化するように作られている。 今回は Slingbox におけるこうした適応制御の特性について、実機を用いたトラフィック計測によって確かめることが目的である。

環境

実験環境を図1.に示す。 実験は LAN 環境にて行った。すべての LAN 経路は Fast Ethernet (100Mbps) である。 Slingbox の入力はTV番組から。 視聴は MacBook Pro (以後単に viewer と書く)の Safari ブラウザを用いた。 Slingbox と viewer の接続には router を介しているが、両者は router の LAN ポートに接続されており、WAN ポートから来る外部トラフィックはほとんど影響がない。

Experimental environment
図1. 実験環境

使用した機器の詳細は下記の通りである。

トラフィック情報の収集は viewer 上で tcpdump を用いて行った。

定常状態

装置が正しく機能していることの確認と、前提条件の提示を兼ねて、典型的な定常状態について示しておく。

特に帯域制限などがない場合、Slingbox は安定して約 8Mbps 程度でストリーミングを行う。 図2. にそのグラフを示す。 縦軸は一秒間あたりの転送量であり、単位は Byte/sec である。 横軸は計測開始からの秒数を示す。

Experimental environment
図2. 定常状態

計測は以下のような手順で行っている。

  1. viewer 上で tcpdump を起動して計測開始
  2. viewer で再生ボタンをクリックして受信開始(そのため最初の数秒はトラフィックの打点がない)
  3. 各種操作(上のケースでは定常状態を見るために動画表示が始まってから単に80秒程度待っただけ)
  4. viewer で停止ボタンをクリックして受信停止
  5. tcpdump を停止して計測終了

図2. に示した定常状態では安定して 1MB/sec ±0.5MB/sec 範囲で推移している。 縦軸の表記は 1e+06 となっているが、これは 1.0 x 10^6 つまり 1MB を意味している。 bps (bit per sec) ではこの 8 倍、つまり 8Mbps ±0.4Mbps である。

帯域制限実験

Slingbox が利用可能な帯域の変化に対して、どのように適応的にストリーミング送出量を対応させるか観察する。

方法

帯域制限装置を router と viewer の間に設置し、ストリーミングの受信途中で帯域幅を上下させて秒あたりのストリーミング送出量の変化を計測する。 具体的には帯域制限装置を 帯域制限装置は Linux による Bridge に、iproute の CBQ (Class Baased Queueing) 機能を適用して実現した。 機器構成を図3. に示す。

Traffic Restriction setup
図3. 帯域制限装置の設置

帯域制限装置に使用した機器の詳細は下記の通りである。

(このハードウェアの能力がCBQによる帯域制御装置として十分で、正しく機能していることは別の実験によって確認した。)

典型的な挙動の確認

機能確認のために多くの実験をしたが、図4. に受信途中で一時的に帯域が低下する典型的なケースについて示す。 ここでは帯域制限を 50Mbps (30sec) → 5Mbps (20sec) → 50Mbps (30sec) と変化させている。 帯域制限に合わせて送出量が一時的に下がり、制限解除に応じて元の送出量までリカバリする様子が分かる。

recovery from bandwidth limitation
図4. 帯域制限からのリカバリ

図2. に示したとおり、送出量の上限値が 8Mbps 程度であり、帯域を 50Mbps に制限した状態では特に影響を受けていないことが確認できる。 30 秒時点で 5Mbps に制約されたため、送出量がぴたりと 6MB/sec (4.8Mbps) 近辺でキャップされている(頭打ちが生じている)。 これにょって若干不安定になっているが、映像は途切れることなく途中で画質が若干悪くなる(ように見える)程度で問題なく視聴は継続される。 その後 5Mbps 制限は解除され、再び 50Mbps (Slingbox にとっては実質制限無し)に設定されると、時間とともに直線的に送出量が増えていき、制限無しでの定常状態である 8Mbps で安定する。

(55 秒位置あたりで 5Mbps 制限が解除されたはずだが、このとき偶発的にか若干送出量が落ちている。今回は簡単なテストをするだけで、重要な現象でない限りは全ての事象について再現性を確認する(繰り返して同条件でテストをしてこれが偶然か必然か確かめる)ことはしていない。)

結論から言うと、Slingbox は帯域幅の減少に対しては動的にストリーミング送出量を変化させて対応する。 帯域幅が減少すると、そこまで素早く送出量を減少させ、その後帯域幅が広くなると可能な限りそれを使うように送出量を上げていく。 他にさまざまなケースを試みたが、上のグラフで見られる送出量の増大ペースはほぼ同じだった。 (上のケースでは 25秒ほどで 4MB/sec ほど送出量が上がっているが、つまり常にこのペース。)

図5. に帯域制限を繰り返した場合の典型的な挙動を示す。 50Mbps 設定を 20秒、2Mbps の制限を 5 秒、これを 5 回繰り返した。

recovery from repeated bandwidth limitation
図5. 繰り返された帯域制限からのリカバリ

他にもさまざまなケースについて実験した結果、下記の二種類の興味深い挙動が観測された。 次節で個別にとりあげて説明する。

リカバリにおける様子見
ある程度以下の低い帯域での視聴を行うと、その後のリカバリでは一時的に様子見を行う
前回送出量の記憶
視聴を止め、再び視聴を始める時には前回止めた時の送出量から始める

興味深い挙動の分析

リカバリにおける様子見

ある程度以下の低い帯域での視聴を行うと、その後のリカバリでは一時的に様子見を行う現象が確認された。 図6. に事例を示す。 ここでは帯域制限を 50Mbps (30sec) → 1Mbps (20sec) → 50Mbps (60sec) と変化させている。 帯域制限に合わせて送出量が一時的に下がるが、制限解除の後、2.5Mbps程度で30秒ほど送出量を増やさない区間があることが確認できる。その後は元の送出量までリカバリするので、まるで増速して良い状況かどうか、30秒ほど「様子見」をしているようだ。

wait and see
図6. 様子見の例

30秒過ぎで 1Mbps まで制限し、20 秒後(50秒過ぎ)に制限を完全に解除した。 これまでに示した結果から、解除した時点からまっすぐ上限の 8Mbps まで直線的に送出量を増やす事が予想されるが、実際には 2.5Mbps あたりまですぐに上がり、その後 30 秒ほど送出量を増やさず横ばい状態を維持する。 それ以降は従来どおりのペースで上限である 8Mbps まで直線的に増速する。

この横ばい状態は制限値を 100Kbps, 500Kbps, 1Mbps に設定したときに現れた。 2Mbps あるいはそれ以上に設定した時には現れなかった事から、ある一定以上に低い帯域しか使えない状況に遭遇すると、それ以降帯域を使えるようになってもすぐ増速させず、しばらく 2.5Mbps で安定するかどうか様子見する戦略を持っているようだ。

ところで何がこの様子見状態へ移行するトリガーを引くのだろう。 境界は 1Mbps と 2Mbps の間にあるはずだが、しかし両者の間に質的な相違はなさそうに思える。

コマ落ちの有無でもない、様子見帯域より高いか低いかでもない。 よくわからない。

前回送出量の記憶

計測を繰り返すうちに、視聴を止め、再び視聴を始める時には前回止めた時の送出量から始めることが判った。 典型的な事例を図7. に示す。 左右のグラフは連続した二つの計測実験を示しており、二つの実験の間隔は一分以上開いている。 左実験では送出速度を上げつつある途中で視聴を停止し、その後右実験で視聴を再開したのだが、右実験では左実験での最終の送出速度から始めているように見える。

memory of the last bandwidth
図7. 前回送出量の記憶

左側の実験では帯域制限なしでの定常状態、つまり 8Mbps 程度で送出している途中で、他のトラフィックを経路に混入させて送出速度が 3-4 Mbps 程度に制限された後の挙動を調べた。 混入トラフィックが制限がなくなった後、他のケースと同様に上限の8Mbps に向けて直線的に送出量を増やしているが、その途中で視聴が停止された。 その次に行われた右側の実験は左実験の再現性を確かめるために同一内容のことを行ったが、左実験で送出量が上限に達しなかったため、終わりの計測時間を40秒延長した。

なお帯域制限がない状況での送出量増加ペースが左実験と右実験で異なる(傾きが右側の方が立っている)ように見えるのは計測時間が左右で 60秒対 100 秒と異なるためである。見た目の傾きは異なるが増加率は同じである。

考察

Slingbox のストリーム送出量増加の一つの特徴は一次関数的(直線的)に増加させていることである。 毎秒およそ 0.12Mbps ずつ増加させている(50 秒で +6Mbps ほどになる)。 一時的に線形に増加させず何らかの形で(例えば二次関数的に)増加率を上げなければ、上限である 8Mbps 近辺では「かったるい」程度にゆっくり増加し、500Kbps といった極端に低い領域では危険なほど急速に増加することになりかねない。 2.5Mbps 近辺での 30 秒間の様子見は、こうした低速域での不安定さを回避する経験知なのではないかと想像する。

前回停止時の送出速度を保持しておくのも、次回再生ボタンを押した時に、その回線で得られる最良の品質の絵が最短時間で得られる、つまり最初から最良品質でストリーミングが行われる事を期待してのものと思われる。 これも再生開始時にスロースタート的な低速状態から始めた場合、上限である 8Mbps 近辺に到達するまでの時間が長くなりすぎ、「かったるい」状態にならないようにするための方法ではないかと想像する。 (例えば様子見時の 2.5Mbps から始めたとすると 8Mbps に到達するまでには 50 秒ほどかかる。)

まとめ

実機を用いて Slingbox のストリーミング時のトラフィック分析を行った。 経路に問題がなければ Slingbox は最大 8Mpbs 程度でストリーミング出力を行う。 帯域的な制約を与えることで、500Kbps程度あれば画質とフレームレートの双方で調整して大きな停滞を引き起こさず視聴が可能であることを確認した。

また、利用可能な帯域を一時的に制限し、そこから復元するときの挙動に注目した。 Slingbox はそうした帯域の変化に対して、ストリーミングサービスとしては一般的と思われる適応的な送出量制御を行っていた。 何種類かの帯域制限実験を通して、この適応制御に加えられたと思われる二つの工夫が観測された。

一つは利用可能な帯域が一定量を下回った場合に「様子見」をすることであり、不用意に要求帯域を高くしすぎてはバースト的なロストによる急激な帯域低下といった乱高下を防ぐためと思われる。 もう一つは前回視聴終了時に利用可能だった帯域数値を記憶し、次回視聴はその値でまず送出を試みることである。 どちらもより安定した、より良いユーザ体験を提供するための工夫と思われる。



Yutaka Yasuda (yasuda [ at ] ylb.jp)