Sunday, September 14, 2014

ストリーミング再生と、次の曲のキャッシュ作成のパスを分けてみた

いろいろ工夫してみたけど、ストリーミング再生用のデータ取得処理と、次の曲のキャッシュ作成を同じような作りでやっているのは無理がでてきたので、大きな修正になるけど別々の処理として行うように変更してみました。

Boxにかぎらず、ほとんどのクラウドサービースはダウンロードをしないでずっと止まっていると、ネットワークが切断されたと勘違いして接続を切断してきます。
ストリーミング処理の場合、とくに音楽再生の場合再生するバッファだけクライアントが取得したら次の取得は、必要になるまで開始されません。
Androidの端末によっては、このバッファの取得サイズが違うようで、たくさんとるものや少ないものもあるように思います。(ここは憶測です)
問題はこの大きいバッファの場合で、この場合長い間通信が止まった状態になっているのだとおもいます。

今回特に問題になっているのは、次の曲の再生処理です。
今までは、曲の切り替わりを素早くするために、次の曲を事前に読み込んでおく処理をいれていました。
しかし、これをMediaPlayerにまかせていたため、再生されない状態でずっとほっとかれるため、バッファの読込処理もずっと止まった状態になります。
これが、次の曲の読込で失敗する原因です。

一つ前の修正でひとまずMediaPlayerにまかせっきりで処理をしていた部分を自分で行うように変更してみました。
これで、ある程度解決できたのかなとおもっていたのですが、まだ失敗する場合があるようなので、さらに原因を調べてみていたのですが、、ここまでずっと修正修正ときていたので、問題の箇所のコードが難しくなりすぎ、理解しずらくなっていました。
なので、ここは思い切ってリファクタリングをすることにし、処理を別々に分けることにしました。

ということで、今回の修正はプログラムを最適化したリリースになります。
ダウンロード専用のコードを書いたので、前より早くなっていると思います。

今回の修正でダウンロードの事前処理を容易に行えるようになったので、長らくほったらかしになっていた、「デバイスに保存」機能の実装にとりかかろうかと思います。ついでにダウンロード中か、どうかのステータス表示もいれます。(だけどアイコンで悩み中、、)


No comments:

Post a Comment