Android音频开发MediaPlayer(-38, 0)错误解决

最近在开发音视频,我用的都是mediaplayer,在切换播放的时候容易报错,在网上查了很多,也没得到解决,最后自己摸索,才解决这个问题。首先,我们第一次播放的时候,不会报错,然后通过setDataSource(url)去改变url的时候,可能会出现error(-38, 0),MediaPlayer: stop called in state 0 或者是其它错误,然后我通过试验发现,在切换url的时候,销毁mediaplayer对象,再重新创建mediaplayer对象就不会报错,而且播放没有问题。应该是在还未就绪的情况下 调用了start导致 发生-38。下面贴出我的初始化和销毁mediaplayer对象的代码。仅供参考

初始化方法(初始化完,在onPrepared里调用mMediaPlayer.start());

public void playPrepareAsync() {
        try {
            if (mUrl == null) {
                return;
            }
            destoryMediaPlayer();
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setOnSeekCompleteListener(this);
            mMediaPlayer.setOnErrorListener(this);
            mMediaPlayer.setOnBufferingUpdateListener(this);
           if (mUrl.startsWith("android.resource://")) {
                mMediaPlayer.setDataSource(this, Uri.parse(mUrl));
            } else {
                mMediaPlayer.setDataSource(mUrl);
            }
            mMediaPlayer.prepareAsync();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            Log.e(TAG, "IllegalArgumentException无法播放" + mUrl);
        } catch (IOException e) {
            Log.e(TAG, "IOException无法播放" + mUrl);
            e.printStackTrace();
        } catch (Exception e) {
            Log.e(TAG, "Exception无法播放" + mUrl);
            setErrPlayState("" + "播放失败 " + e.toString());
        }
    }

public void destoryMediaPlayer() {
        try {
            if (mediaPlayer != null) {
                mediaPlayer.setOnCompletionListener(null);
                mediaPlayer.setOnPreparedListener(null);
                mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer = null;
            }
        } catch (Exception e) {
        }
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值