exoplayer.stop后调用exoplayer.isPlaying方法还是true

项目本身使用的是ijkplayer的封装库,在魅族手机上使用exoplayer播放视频时调用exoplayer.stop()方法后,再次调用 exoplayer.isPlaying竟然还是返回true。这个就很bug了,去看了看源代码,ExoMediaPlayer里面isPlayer使用的代码如下:

@Override

public boolean isPlaying() {

if (mMediaPlayer.getPlayWhenReady()) {

return true;

}else {

return false;

}

}

然而stop方法下代码

@Override

public void stop() {

mMediaPlayer.stop();

}

调用了stop后并没有重置isPlaying中的状态,即调用setPlayWhenReady方法。思考了一下怎么来确定视频播放停止了呢,然后确认使用以下方案解决问题:

mVideoView.pause();

mVideoView.stop();

mVideoView.seekTo(0);

即在stop前调用下pause方法,因为pause方法中实现的就是mMediaPlayer.setPlayWhenReady(false);这样再调用isPlaying()方法就是false了。之后以又调用了一下seekTo(0)是通过isPlaying我只知道是暂停了,但我怎么知道停止呢?所以,seekTo(0)后,我在判断视频是否停止时调用方法getCurrentPosition()来判断是否等于0,这样一来就可以通过isPlaying且getCurrentPosition==0来判断视频是否停止。

exoplayer不像ijkplayer使用起来那么方便,ijkplayer调用stop方法后isPlaying就是false,当然后防止exoplayer在destroy页面时还会继续播放问题时,在onDestroy方法中调用这三句即可:

mMediaPlayer.setPlayWhenReady(false);

mMediaPlayer.stop();

mMediaPlayer.seekTo(0);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容