2012-03-26 4 views
8

ライブオーディオをストリーミングしていて、メディアプレーヤを一時停止して現在のライブポジションから開始する機能が必要です。デフォルトのPause()とStart()は、停止したところから始まります。 Start()が瞬時になるように現在の位置を更新する方法に関するアイデアはありますか?一時停止時にMediaPlayerの開始位置を更新する

+0

私の答えを編集しました。それは役に立ちます。 – bughi

答えて

6

seekTo()を呼び出してみましたか?

TimerTaskで半分ごとにseekTo()を呼び出すことで、それを忌み嫌うように更新しておくことができますが、これについてどう感じるか分かりません。

EDIT:あなたが最後の呼び出し(この場合は500ミリ秒)以来ellapsed currentPosition +時間でそれを呼ぶだろう前進し、それを維持するために、500ミリ秒ごとseekTo()を呼び出した場合。しかし、これが最高のものかどうかはもう分かりません。別の方法は、新しいseekTo(currentPosition + timeEllapsed)を実行するOnSeekCompleteListenerを作成することです。あなたはそのようtimeEllapsedを計算する必要がある。この場合:currentSystemTime - http://developer.android.com/reference/android/media/MediaPlayer.htmlからsystemTimeOnLastCall

再生位置はseekToへの呼び出し(int型)で調整することができます。

非同期のseekTo(int)呼び出しは正しい方法で戻りますが、実際のシーク操作は終了するまでに時間がかかることがあります。特に、オーディオ/ビデオのストリーミングには時間がかかることがあります。実際のシーク操作が完了すると、onSeekCompleteListenerがsetOnSeekCompleteListener(OnSeekCompleteListener)を介してあらかじめ登録されている場合、内部プレーヤエンジンは OnSeekComplete.onSeekComplete()を提供したユーザを呼び出します。

seekTo(int)は、Prepared、Paused、PlaybackCompletedなどの他の状態でも呼び出すことができます。

また、実際の現在の再生位置はgetCurrentPosition()を呼び出すことで取得できます。これは、再生の進行状況を把握する必要のあるミュージックプレーヤーなどのアプリケーションに役立ちます。

+0

getCurrentPosition()は一時停止した位置を返しているようですが、ストリームの終わりの位置(ライブコンテンツ)をseekTo()の位置に取得するにはどうすればいいですか? – Brianjs

+1

+1 "非同期のseekTo(int)呼び出しが正しい方法で戻りますが、実際のシーク操作には時間がかかる場合があります"。これは私の問題を解決しました。 – Tiago

+0

seekTo(0)を呼び出します。後にstream.start();私のために働いた – aytek

1

MediaPlayerを一時停止するときにMediaPlayer.getCurrentPositionに電話をかけ、MediaPlayer.seekToを呼び出して、MediaPlayerを再起動したときの位置を設定し直します。

+0

一時停止が押されたときにストリーム内の位置に戻ってきますか?少なくとも私はそれをテストしたときにそれが何をしているのですか? Startをもう一度押すと、ライブコンテンツのストリームの最後に移動したいと思います。 – Brianjs

+2

ああ、申し訳ありませんが、私は「生きている」ことに気付かなかった。あなたがライブオーディオをストリーミングしているので、ユーザーがMediaPlayerを一時停止したときにMediaPlayerを単に停止させることができます。ユーザーがMediaPlayerを再起動したときにMediaPlayerを 'reset'して' start'します。あなたは常にライブストリームの最後にいます。 – neevek

関連する問題