【发布时间】:2012-03-26 01:04:37
【问题描述】:
我正在流式传输实时音频并希望具有暂停媒体播放器然后从当前实时位置开始的功能。默认的 Pause() 和 Start() 只是从它停止的地方开始。关于如何保持当前位置更新以便 Start() 即时的任何想法?
【问题讨论】:
-
刚刚编辑了我的答案,希望对您有所帮助
标签: android android-mediaplayer
我正在流式传输实时音频并希望具有暂停媒体播放器然后从当前实时位置开始的功能。默认的 Pause() 和 Start() 只是从它停止的地方开始。关于如何保持当前位置更新以便 Start() 即时的任何想法?
【问题讨论】:
标签: android android-mediaplayer
你试过调用 seekTo() 吗?
您可以通过使用TimerTask 每半秒左右调用一次 seekTo() 来保持它的永久更新,但我不知道我对此有何感受。
编辑:如果您每 500 毫秒调用一次 seekTo(),为了保持它向前移动,您可以使用 currentPosition + 自上次调用以来经过的时间(在本例中为 500 毫秒)调用它。但是我也不知道这是否是最好的方法。另一种方法是创建一个 OnSeekCompleteListener 来执行新的 seekTo(currentPosition + timeEllapsed)。在这种情况下,您需要像这样计算 timeEllapsed:currentSystemTime - systemTimeOnLastCall
来自http://developer.android.com/reference/android/media/MediaPlayer.html:
可以通过调用 seekTo(int) 来调整播放位置。
虽然异步 seekTo(int) 调用以正确的方式返回,但实际的 seek 操作可能需要一段时间才能完成,尤其是对于正在流式传输的音频/视频。当实际的查找操作完成时,内部播放器引擎调用用户提供的 OnSeekComplete.onSeekComplete() 如果已通过 setOnSeekCompleteListener(OnSeekCompleteListener) 预先注册了 OnSeekCompleteListener。
请注意,seekTo(int) 也可以在其他状态下调用,例如 Prepared、Paused 和 PlaybackCompleted 状态。
此外,可以通过调用 getCurrentPosition() 来检索实际的当前播放位置,这对于需要跟踪播放进度的音乐播放器等应用程序很有帮助。
【讨论】:
您在暂停 MediaPlayer 时调用 MediaPlayer.getCurrentPosition,并在重新启动时调用 MediaPlayer.seekTo 将位置设置回 MediaPlayer。
【讨论】:
live。由于您正在流式传输实时音频,因此当用户暂停它时,您可以简单地 stop MediaPlayer,当用户重新启动它时,reset 和 start MediaPlayer。您将始终处于直播的末尾。