Android MediaPlayer がさまざまなストリームでのライブ ストリーム再生の準備にかかる時間に大きな違いがあることを発見しました。
ハードデータ
prepareAsync() と onPrepared(MediaPlayer mp) コールバックの間にログを追加し、複数のストリームをそれぞれ数回テストしました。各ストリームの時間は非常に一貫しており (+/- 1 秒)、結果は次のとおりです。
- MPR ニュース ストリーム: 27 秒 (http://newsstream1.publicradio.org:80/)
- MPR クラシック音楽ストリーム: 15 秒 (http://classicalstream1.publicradio.org:80/)
- MPR 現在のストリーム: 7 秒 (http://currentstream1.publicradio.org:80/)
- PRI ストリーム: 52 秒 (http://pri-ice.streamguys.biz/pri1)
テストは、3G 接続 (~1100 Kbps) 上の Android 2.3.4 を搭載した Nexus S で実行されました。
非ストリーミング MP3 オーディオ ファイルの再生は問題ありません。
ストリームを再生する方法のスニペットを次に示します。
MediaPlayer を準備します。
...
mediaPlayer.setDataSource(playUrl);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
...
次に、onPrepared(MediaPlayer mp) で:
mediaPlayer.start();
一部のストリームを準備するのに時間がかかり、他のストリームを準備できないのはなぜですか? 上記のデータは、バッファリングされたオーディオ コンテンツの長さではなく、バッファリングされたデータの量に基づいている可能性があることを示唆しているようです。これは本当にありえますか?
更新: Android 1.6、2.2、および 2.3.4 を搭載した物理デバイスと、1.6、2.1、2.2、2.3.1、および 2.3.3 を搭載したエミュレーターでライブ ストリーミングをテストしました。2.3.3 と 2.3.4 でのみ長い遅延が見られます。古いバージョンは 5 秒以内に再生を開始します。