ストリーミングが正常に再生されない理由

このネタ、まだかいてませんでした ^^;
動画のストリーミングが正常に再生されない原因を調べてほしいというご相談を受ける事が良くあります

正常に再生できない、という現象にもいろいろあって、絵が乱れる(箱のようなノイズが入る、絵が止まる、絵が飛ぶ)、音が乱れる(音が飛ぶ、止まる)、そもそも再生を開始しない、etc

まず多いのが、同じコンテンツであっても正常に再生できる時は再生できるのだけど、時々出来なくなる。できなくなる時間帯がだいたい同じ。もしくは逆でほとんど再生できないのだけどたまに再生できることがあって、再生できる時間帯がだいたい同じ。
こういうのは原因がほとんど WiFi の干渉によるネットワーク性能の劣化で、現象が出ている時のネットワークのスループットを測ってみると、コンテンツのビットレート以上のスループット(がネットワークに確保できていないとストリーミングは成立しません)が出ていません。こういう時は、ストリーミングのクライアントは流れてくるコンテンツを十分な量になるまで溜めるために再生を止めようとします。これをバッファリングと呼ぶのですが、ネットワーク性能が出ていない時はこれが頻繁に発生して再生が正常に進みません。

そもそも WiFi は干渉を起こしやすく、マンション等でも隣や上下の解の WiFi と干渉を起こす事がよくあり、とくに近所の WiFi が大量のデータを通信している時(たとえばストリーミング再生を始めた等)に自分の WiFi の通信速度が著しく低くなり、1MBps を下回ってしまうようなことも良くあります。
ちなみに WiFi の干渉状態のチェックには専用の機材は不要で PC があれば十分です。いろいろなアプリがあるのですが私は InSSIDer というアプリをつかっています。また、ネットワークのスループットの測定ですが UNIX に古くからある iperf がシンプルですが使いやすいです。Windows の場合は Cygnus の Network tool のなかに iperf があるのでそれを使うとインストールも楽です。Android の iperf アプリケーションもいくつかあるので、私は Windows 上の Cygwin の iperf をserver にして、Android をクライアントにしてスループットを測るようにしています。

次に多いのはストリーミングアプリケーションの問題で、ハードウェアアクセラレータ(この辺り、ストリーミングの仕組みについてもいつか解説したほうがいいかもしれないと思ってきました)を使わないタイプのアプリケーションがコンテンツのデコードに CPU を使い切ってしまい、デコードが間に合っていない場合。
これは端末の CPU 消費量を表示するとすぐにわかるのでこちらも簡単です。

あと、そもそもコンテンツの種類がストリーミングに対応していない、というのもたまにあります。このあたりは本当にストリーミングの仕組みと関係してくる話なので、後日、詳しく解説させていただきます。

以上のどれでもなかったとき、これが厄介で、想像もつかないようなことが結局原因なのですが、何日も現場につめて、いろいろなログをとったりしてだいたい2週間ぐらい調べて原因が特定されることになりますが、こういうのは本当にまれで、30回調べて一回あるかないか、という頻度です。

尚、上記の3つの「よくある」ケースですが、実は一般家庭だけでなく、こういう機器のメーカーでもときどき起きていて、現場に見に行ってみると同じフロアにテスト環境として大量においてある WiFi の AP 同士が干渉してたというような一目現場を見ただけで原因の見当がついてしまうようなこともよくありました。お話をうかがってみると「なぜか昼休みや深夜は現象がでない」とのこと、これもテスターの人たちがお昼ご飯たべにいったり家にかえってしまってたりして他の WiFi の AP が動いていないから競合がおきないのが理由ですね。

こんな感じなのでストリーミングが正常に再生されないときは、コンテンツの形式云々よりもまず、WiFiスループットを実際に測ってみることをおすすめいたします。