インターネットからオーディオを再生できるメディアプレーヤーを開発しています。私が気付いたように、MediaPlayer
リモート コンテンツを再生するとき、標準は非常に不安定です。多くの場合、理由もなく再生が停止したり停止したりします。一方で、メディア キャッシングを実装したいと考えています。MediaPlayer
しかし、バッファリングされたコンテンツを取得してデバイスのどこかに保存する方法が見つかりませんでした。
そこで、自分でバッファリングを実装して、MediaPlayer
ローカル メディアのみを再生できるようにしたいと思います。私が最初に目にする方法は、十分なメディアをファイルにダウンロードし、このファイルを介して再生を開始しMediaPlayer
、残りのメディアのダウンロードを続行することです (十分なメディアがダウンロードされていない場合は一時停止し、そのような他のイベントを処理します)。
問題は、ファイルの再生と追加を同時に行うことができるかどうかです。今、私は'sIllegalStateExceptions
を呼び出すときだけ持っていますMediaPlayer
setDataSource
UPD
IllegalStateException
無効なロジックが原因でした。MediaPlayer が再生中です。
しかし、別の問題が発生しました。
したがって、トラックの最初の 5% がダウンロードされ、MediaPlayer が再生を開始し、これらの 5% を再生してから停止します。遊び続ける方法ですか?
再生の開始は簡単です:
private void startPlayback(final File file) {
try {
FileInputStream fs = new FileInputStream(file);
mPlayer.setDataSource(fs.getFD());
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
Log.e(e);
}
}
この場合に役立つ他のストリームタイプがあるかもしれませんか?