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) {
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章