我正在Android上开发在线流媒体播放器。我发现媒体播放器永远不会停止缓冲!它读取100%的缓冲区并继续做“某事”,因为流只能读取一次,没有任何东西可以缓冲... 我明白了
public void onBufferingUpdate(MediaPlayer player, int percent)
被无休止地称为百分比= 100.它会耗尽电池一晚。我做错了什么或对此有一些合理的解释?似乎无法取消缓冲,阻止它的唯一方法是重置媒体播放器本身。我需要一些方法来阻止这种无休止的'缓冲'!
这是我如何初始化媒体播放器
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource(streamUrl);
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnInfoListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnErrorListener(this);
mMediaPlayer.prepareAsync();
我看到的日志消息:
10-30 08:45:21.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=93, ext2=0x0
10-30 08:45:22.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
10-30 08:45:23.169: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
10-30 08:45:24.172: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
10-30 08:45:25.172: D/MediaPlayer(13217): Message: MEDIA_BUFFERING_UPDATE(3), ext1=100, ext2=0x0
...
答案 0 :(得分:2)
首先,在不使用MediaPlayer时暂停MediaPlayer并不是一个好主意。它有时可能有效,但Android最终会收回这些资源。当你的应用程序处于非活动状态时,不要清理它是一种不好的做法。
那就是说,我相信它正在做的是维护一个服务器的开放套接字,可能在它ping时确保套接字仍处于打开状态时发送缓冲通知。 HTTP流式传输过于简单,无法满足您的要求。但是你至少有一个选项可以让它发挥作用。您可以插入一个代理,允许您同时缓存流和播放。您必须聪明地处理用户在流完全缓存之前退出时会发生什么,但它可以工作。此时,MediaPlayer将缩减为本地文件播放,您可以在再次打开应用程序时停止并寻找正确的点。它提供了一种更好地管理资源和网络通信的方法。
答案 1 :(得分:0)
试试这个。这将在退回时结束媒体播放器。
@Override
public void onBackPressed() {
mp.stop();
mp.reset();
this.finish();
}