Android MediaPlayer 在网络不好的情况下播放 url 中的 mp3
Android MediaPlayer play mp3 from url with bad network
我想用MediaPlayer播放url中的mp3,但是在缓冲部分流时网络断开了,当网络再次连接时如何继续缓冲剩余的流。
mp = MediaPlayer.create(this, Uri.parse("http://media.cmechina.net/mobile/201500011693/02/flv/5.mp3"));
mp.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.d("TAG", "percent: " + percent);
}
});
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d("TAG", "onError === what: " + what + " extra: " + extra);
return false;
}
});
mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
Log.d("TAG", "onInfo what: " + what + " extra: " + extra);
return false;
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.d("TAG", "onCompletion is called!");
}
});
当网络中断时,您应该从 onError 方法知道,当这种情况发生时,您可以保存播放器停止的位置并再次尝试流式传输。
我个人更喜欢从 MediaPlayer
创建实例然后我使用
player.setOnPreparedListener(this);
androidPlayer.setDataSource(URL);
androidPlayer.prepareAsync();
一旦玩家准备好并触发 onPrepared(MediaPlayer player)
,检查是否有保存的位置然后调用 player.seekTo(timeMilisecond)
记得为 onPrepared
和 onSeekComplete
设置监听器
我有同样的问题,但在我的情况下我没有收到 onError 调用(是的,它已注册)但是在播放已经缓冲的数据后我收到了一个 onComplete 调用。
我想用MediaPlayer播放url中的mp3,但是在缓冲部分流时网络断开了,当网络再次连接时如何继续缓冲剩余的流。
mp = MediaPlayer.create(this, Uri.parse("http://media.cmechina.net/mobile/201500011693/02/flv/5.mp3"));
mp.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.d("TAG", "percent: " + percent);
}
});
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d("TAG", "onError === what: " + what + " extra: " + extra);
return false;
}
});
mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
Log.d("TAG", "onInfo what: " + what + " extra: " + extra);
return false;
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.d("TAG", "onCompletion is called!");
}
});
当网络中断时,您应该从 onError 方法知道,当这种情况发生时,您可以保存播放器停止的位置并再次尝试流式传输。
我个人更喜欢从 MediaPlayer
创建实例然后我使用
player.setOnPreparedListener(this);
androidPlayer.setDataSource(URL);
androidPlayer.prepareAsync();
一旦玩家准备好并触发 onPrepared(MediaPlayer player)
,检查是否有保存的位置然后调用 player.seekTo(timeMilisecond)
记得为 onPrepared
和 onSeekComplete
我有同样的问题,但在我的情况下我没有收到 onError 调用(是的,它已注册)但是在播放已经缓冲的数据后我收到了一个 onComplete 调用。