2012-03-26 6 views
8

Ich streame Live-Audio und möchte die Funktion haben, den Mediaplayer anzuhalten und dann von der aktuellen Live-Position aus zu starten. Die Standardwerte Pause() und Start() beginnen genau dort, wo sie gestoppt wurde. Irgendwelche Ideen, wie man die aktuelle Position auf dem neuesten Stand hält, so dass Start() sofort ist?Update MediaPlayer Startposition bei Pause

+0

gerade meine Antwort bearbeitet, hoffe es hilft – bughi

Antwort

6

Haben Sie versucht, seekTo() aufzurufen?

Sie könnten es permanent aktualisiert halten, indem Sie seekTo() jede halbe Sekunde oder so mit TimerTask aufrufen, aber ich weiß nicht, wie ich darüber fühle.

EDIT: Wenn Sie seekTo() alle 500 Millisekunden aufrufen, würden Sie es mit der currentPosition + -Zeit seit dem letzten Aufruf (500 Millisekunden in diesem Fall) aufrufen, um es vorwärts zu bewegen. Aber ich weiß nicht, ob das der beste Ansatz ist. Eine andere Möglichkeit besteht darin, einen OnSeekCompleteListener zu erstellen, der ein neues seekTo (currentPosition + timeEllapsed) vorformatiert. In diesem Fall müssen Sie timeEllapsed wie so berechnen: currentSystemTime - systemTimeOnLastCall

Von http://developer.android.com/reference/android/media/MediaPlayer.html:

Die Wiedergabeposition mit einem Aufruf an seekTo (int) angepasst werden kann.

Obwohl der asynchrone seekTo (int) -Aufruf den richtigen Weg zurückgibt, kann der eigentliche Suchvorgang einige Zeit in Anspruch nehmen, insbesondere wenn Audio/Video gestreamt wird. Wenn der eigentliche Suchvorgang abgeschlossen ist, ruft die interne Player-Engine einen vom Benutzer bereitgestellten Code OnSeekComplete.onSeekComplete() auf, wenn zuvor ein OnSeekCompleteListener über setOnSeekCompleteListener (OnSeekCompleteListener) registriert wurde.

Bitte beachten Sie, dass seekTo (int) auch in den anderen Zuständen wie Prepared, Paused und PlaybackCompleted aufgerufen werden kann.

Außerdem kann die aktuelle Wiedergabeposition mit einem Aufruf von getCurrentPosition() abgerufen werden, was für Anwendungen wie einen Musik-Player hilfreich ist, die den Wiedergabefortschritt verfolgen müssen.

+0

Es scheint, dass getCurrentPosition() die Position zurückgibt, an der es pausiert wurde, wie würde ich die Position des Endes des Streams (Live-Inhalt) zu seekTo() diese Position bekommen. – Brianjs

+1

+1 für "Obwohl der asynchrone seekTo (int) -Aufruf den richtigen Weg zurückgibt, kann der eigentliche Suchvorgang eine Weile dauern, bis er beendet ist". Das hat mein Problem gelöst. – Tiago

+0

Aufruf seekTo (0); nach stream.start(); hat für mich gearbeitet – aytek

1

Sie rufen MediaPlayer.getCurrentPosition auf, wenn Sie Ihren MediaPlayer pausieren, und rufen Sie MediaPlayer.seekTo auf, um die Position zu dem MediaPlayer zurückzusetzen, wenn Sie es neu starten.

+0

Wird mich das nicht einfach zurück zu dem Ort im Stream, wenn Pause gedrückt wurde? Zumindest wenn ich es getestet habe, ist es das, was es tut. Ich möchte am Ende des Streams zum Live-Inhalt gehen, wenn Start erneut gedrückt wird. – Brianjs

+2

Oh, Entschuldigung, ich habe das 'live' nicht bemerkt. Da Sie Live-Audio streamen, können Sie den MediaPlayer einfach "anhalten", wenn der Benutzer ihn anhält, den MediaPlayer "zurücksetzen" und "starten", wenn der Benutzer ihn neu startet. Sie werden immer am Ende des Livestreams sein. – neevek