【问题标题】:Android MediaPlayer play mp3 from url with bad networkAndroid MediaPlayer 从网络不良的 url 播放 mp3
【发布时间】:2015-08-20 05:04:40
【问题描述】:

我想用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!");
    }
});

【问题讨论】:

标签: android mp3 media-player


【解决方案1】:

当网络中断时,你应该从 onError 方法中知道,当发生这种情况时,你可以保存播放器停止的位置并再次尝试流式传输。 我个人更喜欢从MediaPlayer 创建实例然后我使用

player.setOnPreparedListener(this);
androidPlayer.setDataSource(URL);
androidPlayer.prepareAsync();

一旦玩家准备好并触发onPrepared(MediaPlayer player),检查是否有保存位置然后调用player.seekTo(timeMilisecond)

记得为onPreparedonSeekComplete 设置监听器

【讨论】:

    【解决方案2】:

    我有同样的问题,但在我的情况下,我没有收到 onError 调用(是的,它已注册),但在播放已经缓冲的数据后,我收到了 onComplete 调用。

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多