27

私のアプリケーションでは、オーディオ ストリームの準備とバッファリングに時間がかかります。この質問を読みました Android の MediaPlayer がライブ ストリームの再生を準備するのに時間がかかるのはなぜですか? 、しかし、人々がこの問題を経験したと言っているだけで、問題を改善する方法は述べていません.

2.2 - 4.1.2 からテストされた Android のすべてのバージョンでこれが発生しています。

ストリームは、モバイルおよび 3G 接続に適したビットレートです。同じストリームは、同等の iOS アプリでバッファリングを開始するのに 1 秒もかかりません。

バッファリングする時間を指定する方法はありますか? Tune In ラジオ アプリケーションがこの機能を提供していることは知っています ( https://play.google.com/store/apps/details?id=tunein.player )。

ありがとう。

編集:もう一度テストしたところ、Gingerbread以降(> = 2.3)を実行しているデバイスでのみ発生することがわかりました。Android が基盤となるフレームワークを OpenCore から StageFright に変更したことは知っています。では、メディア フレームワークを最適化するにはどうすればよいでしょうか。古い HTC Wildfire が新しい HTC One X や Nexus 7 より文字通り 10 倍高速に準備、ストリーミング、再生できるというのは、間違っているように思えます。

4

3 に答える 3

15

私はこの質問に何ヶ月も悩まされてきました。最後に私は解決策を見つけました。

本当の問題は、MediaPlayer クラスの実装にあります。特に MediaPlayer がデータをバッファリングする方法で。これが、解決策が独自のバッファリングを作成し、それを一時ファイルに保存して、MediaPlayer にフィードすることである理由です。

このチュートリアルとソース コードでは、その方法を正確に説明しています。http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html

このコードを適応させることで、はるかに優れたストリーミング プレーヤーを簡単に作成できます。

Google Developers はここで本当に失敗しました。

編集:この答えはかなり古いです。MediaPlayer今日では、使用しないで代わりに使用することをお勧めしExoPlayerます。拡張可能で安定しており、さまざまな種類のメディアを再生できます。ここで見つけることができます: https://github.com/google/ExoPlayer/

于 2014-02-07T09:33:29.287 に答える
9

Android MediaPlayer クラスはバッファ サイズなどの下位レベルの設定へのアクセスを提供しないため、実際にできることはあまりありません。唯一の代替手段は、AudioTrack と FFmpeg のようなライブラリを使用して独自のプレーヤーを作成し、デコードを行うことです。

于 2012-12-02T07:30:31.077 に答える
0

私がお勧めすることの1つは、エンコーディングを試してみることです。たとえば、MP4の場合、MOOV Atomがファイルの先頭にあることを確認します(ffmpegなどでこれを行う方法に関するS / Oに関する十分な質問があります)。MP3を使用すると、たとえば、さまざまなコーデックやビットレートを確認できます。

たとえば、オンラインで見つけた多数のオーディオファイルを試すことができます。バッファリングに時間がかからないオーディオファイルを見つけた場合は、同じ方法でファイルをエンコードしてみてください。

于 2012-12-02T07:36:31.097 に答える