アプリケーションでオーディオストリームの準備とバッファリングに時間がかかります。私はこの質問を読みました AndroidのMediaPlayerが再生用のライブストリームを準備するのになぜこんなに時間がかかるのですか? しかし、それは人々がこの問題を経験したと言っているだけで、問題を改善する方法は述べられていません。
Androidのすべてのバージョンでこの問題が発生しており、2.2から4.1.2でテストされています。
ストリームは、モバイルおよび3G接続に適したビットレートです。同じストリームは、同等のiOSアプリでバッファリングを開始するのに1秒もかかりません。
バッファリングする時間を指定する方法はありますか? Tune Inラジオアプリケーションがこの機能を提供していることを知っています( https://play.google.com/store/apps/details?id=tunein.player )。
ありがとう。
編集:私は再度テストしましたが、Gingerbread以降(> = 2.3)を実行しているデバイスでのみ発生することがわかりました。 Androidは、基になるフレームワークをOpenCoreからStageFrightに変更しました。どのようにメディアフレームワークを最適化できますか?古いHTC Wildfireが文字通り10倍速く準備、ストリーミング、再生できるのは間違っているようです新しいHTC One XとNexus 7よりも。
私はこの質問に何ヶ月も苦労してきました。最後に私は解決策を見つけました。
実際の問題は、MediaPlayerクラスの実装にあります。特にMediaPlayerがデータをバッファリングする方法。これが、独自のバッファリングを作成し、それを一時ファイルに保存し、それをMediaPlayerにフィードするソリューションである理由です。
このチュートリアルとソースコードは、その方法を正確に説明しています。 http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html
このコードを適応させることで、はるかに優れたストリーミングプレーヤーを簡単に作成できます。
Google Developersは本当にここで失敗しました。
編集:この答えはかなり古いです。今日では、MediaPlayer
を使用せずに、代わりにExoPlayer
を使用することをお勧めします。拡張可能で安定しており、さまざまなタイプのメディアを再生できます。あなたはここでそれを見つけることができます: https://github.com/google/ExoPlayer/
Android MediaPlayerクラスは、バッファーサイズなどの低レベルの設定へのアクセスを提供しないため、実際にできることは多くありません。唯一の代替策は、AudioTrackを使用して独自のプレーヤーを作成することです。デコードを行うFFmpegのようなライブラリ。
私がお勧めするのは、エンコーディングをいじることです。たとえば、MP4の場合、MOOV Atomがファイルの先頭にあることを確認します(ffmpegなどでこれを行う方法に関してS/Oで十分な質問があります)。MP3を使用する場合たとえば、さまざまなコーデックやビットレートを確認できます。
たとえば、オンラインで見つけた多数のオーディオファイルを試すことができます。バッファリングに時間がかからないものを見つけた場合は、同じ方法でファイルをエンコードしてみてください。