Android音频开发MediaPlayer(-38, 0)错误解决
最近在开发音视频,我用的都是mediaplayer,在切换播放的时候容易报错,在网上查了很多,也没得到解决,最后自己摸索,才解决这个问题。首先,我们第一次播放的时候,不会报错,然后通过setDataSource(url)去改变url的时候,可能会出现error(-38, 0),MediaPlayer: stop called in state 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) {
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)