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

最近在开发音视频,我用的都是mediaplayer,有时会出现error(-38, 0),MediaPlayer: stop called in state 0 或者是其它错误,应该是在还未就绪的情况下调用了start导致发生-38。

在播放视频的过程中时候,如果缓冲的部分播完了,而没有继续缓冲视频而播放就会报error(1, -1004),当报完错之后,播放器不会再继续自动缓冲播放。目前没有发现解决的办法,暂时的解决方案就是更换播放引擎,使用B站的开源播放器ijkplayer。

下面贴出我的初始化和销毁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) {
        }
    }

你可能感兴趣的:(Android音频开发MediaPlayer(-38,0)(-1004)错误解决)