Обновить начальную позицию MediaPlayer при паузе

Я транслирую аудио в прямом эфире и хочу иметь возможность приостановить медиаплеер, а затем начать с текущей позиции в реальном времени. По умолчанию Pause() и Start() просто начинаются с того места, где они были остановлены. Любые идеи о том, как обновлять текущую позицию, чтобы Start () был мгновенным?


person Brianjs    schedule 26.03.2012    source источник
comment
только что отредактировал свой ответ, надеюсь, это поможет   -  person bughi    schedule 26.03.2012


Ответы (2)


Вы пытались вызвать seekTo()?

Вы можете постоянно обновлять его, вызывая seekTo() каждые полсекунды или около того с помощью TimerTask., но я не знаю, как я к этому отношусь.

EDIT: Если вы вызываете seekTo() каждые 500 миллисекунд, чтобы он продолжал двигаться вперед, вы должны вызывать его с currentPosition + временем, прошедшим с момента последнего вызова (в данном случае 500 миллисекунд). Но опять же, я не знаю, лучший ли это подход. Другой способ — создать OnSeekCompleteListener, который предварительно формирует новый seekTo(currentPosition + timeEllapsed). В этом случае вам нужно рассчитать timeEllapsed следующим образом: currentSystemTime - systemTimeOnLastCall

Из http://developer.android.com/reference/android/media/MediaPlayer. HTML:

Позицию воспроизведения можно настроить с помощью вызова seekTo(int).

Хотя асинхронный вызов seekTo(int) возвращает правильное значение, фактическая операция поиска может занять некоторое время, особенно для потоковой передачи аудио/видео. Когда фактическая операция поиска завершается, внутренний механизм проигрывателя вызывает предоставленный пользователем OnSeekComplete.onSeekComplete(), если OnSeekCompleteListener был зарегистрирован заранее с помощью setOnSeekCompleteListener(OnSeekCompleteListener).

Обратите внимание, что seekTo(int) также может вызываться в других состояниях, например, в состояниях Prepared, Paused и PlaybackCompleted.

Кроме того, фактическую текущую позицию воспроизведения можно получить с помощью вызова getCurrentPosition(), что полезно для таких приложений, как музыкальный проигрыватель, которым необходимо отслеживать ход воспроизведения.

person bughi    schedule 26.03.2012
comment
похоже, что getCurrentPosition() возвращает позицию, в которой она была приостановлена, как мне получить позицию конца потока (живого контента) для seekTo() этой позиции. - person Brianjs; 26.03.2012
comment
+1 за хотя асинхронный вызов seekTo(int) возвращается правильно, фактическая операция поиска может занять некоторое время для завершения. Это решило мою проблему. - person Bitcoin Cash - ADA enthusiast; 29.08.2014
comment
вызов seekTo(0); после потока.старт(); работал на меня - person aytek; 12.05.2016

Вы вызываете MediaPlayer.getCurrentPosition, когда ставите на паузу MediaPlayer и вызовите MediaPlayer.seekTo, чтобы установить верните позицию в MediaPlayer при его перезапуске.

person neevek    schedule 26.03.2012
comment
Разве это не вернет меня обратно к месту в потоке, когда была нажата пауза? По крайней мере, когда я тестировал это, это то, что он делает. Я хотел бы перейти к концу потока к живому контенту при повторном нажатии кнопки «Старт». - person Brianjs; 26.03.2012
comment
Ой, извините, я не заметил live. Поскольку вы транслируете живое аудио, вы можете просто stop использовать MediaPlayer, когда пользователь приостанавливает его, reset и start MediaPlayer, когда пользователь перезапускает его. Вы всегда будете в конце прямой трансляции. - person neevek; 26.03.2012