美文网首页图像处理
Android IjkPlayer各状态解析

Android IjkPlayer各状态解析

作者: 星晴_371a | 来源:发表于2021-04-26 16:49 被阅读0次

1.ijkPlayer状态图

2.各个状态的含义

3.状态的详细解析

IDLE状态:空闲/闲置状态,这个状态有两种触发的方式:

1. 我们在new一个新的播放器private IjkMediaPlayer mediaPlayer = new IjkMediaPlayer(); 创建之后这个mediaPlayer就处于IDLE状态

2.除了END状态以外,在其他状态调用reset()方法,可以让mediaPlayer转为IDLE状态。

此状态可转变为:

1.调用setDataSource()方法转化为INITIALIZED状态。

2.调用release()方法转化为END状态。

INITIALIZED状态:初始化状态

当mediaPlayer处于IDLE状态时,调用setDataSource()方法可以转变为INITIALIZED状态

此状态可转变为:

1.调用prepareAsync()方法转化为ASYNC_PREPARING状态。

2.调用reset()方法转化为IDEL状态。

3.调用release()方法转化为END状态。

ASYNC_PREPARING状态:准备中,比如通过网络播放一个音频地址,

INITIALIZED状态下调用prepareAsync()方法。

STOPPED状态下调用prepareAsync()方法。

此状态可转变为:

流成功开启后转化为PREPARED状态。

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态。

出现错误转化为ERROR状态。

PREPARED状态:准备工作完成。

ASYNC_PREPARING状态下成功开启流。

此状态可转变为:

调用start()方法转化为STARTED状态,上面表格里看到的音频正在播放的状态.

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态。

STARTED状态:正在播放状态

PREPARED状态下调用start()方法。

PAUSED状态下调用start()方法。

COMPLETED状态下调用start()方法。

可以转换的状态:

调用pause()方法转化为PAUSED状态。

调用stop()方法转化为STOPPED状态。

流正常中止后转化为COMPLETED状态。

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态。

出现错误转化为ERROR状态。

PAUSED:暂停状态

STARTED状态下调用pause()方法。

可以转换的状态:

调用start()方法转化为STARTED状态。

调用stop()方法转化为STOPPED状态。

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态

COMPLETED:工作正常完成状态,(正常播放完整首音频)

可以转换的状态:

调用start()方法转化为STARTED状态。

调用stop()方法转化为STOPPED状态。

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态。

STOPPED:停止状态

STARTED状态下调用stop()方法。

PAUSED状态下调用stop()方法。

COMPLETED状态下调用stop()方法。

可以转换的状态:

调用prepareAsync()方法转化为ASYNC_PREPARING状态。

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态

ERROR:出现播放错误状态

转化条件

调用prepareAsync()方法时出错。

调用start()方法时出错。

可转化为

调用reset()方法转化为IDEL状态。

调用release()方法转化为END状态。

END:最终状态,不可逆。

转化条件

任意状态下调用release()方法。

可转化为

不可转化,此状态下的MediaPlayer不能再使用,必须重新创建

学习这些状态的作用在于能清晰认识到播放器播放过程中的状态,避免出现一些异常的发生。

比如:我们要实现一个音乐播放器,涉及到 暂停/播放,上一首,下一首,停止。

默认我们的音乐播放列表里面有10首歌曲,我们一开始点击播放,正常从列表中position为0的位置开始播放,这时候我们的mediaPlayer就处于started状态,然后我们要想切换一首歌曲,点击了下一首,如果你没有对状态有个清晰的认识,直接mediaPlayer.setDataSource(url), url是position为1的那条音频url地址。那么就相当于与咱们直接从started状态到INITIALIZED状态:初始化状态.这时候就会发现代码里面其实已经抛出了异常。那么我们了解状态之后,知道当前的started状态,我们可以通过reset()方法,先让其回到空闲状态,然后再去设置mediaPlayer.setDataSource(url),变成INITIALIZED,然后prepareAsync();监听到prepared的时候,调用start()方法进行播放。

当然了,上面的都是些基础的概念与使用,可以帮助我们理解播放器播放的过程。关于音频播放里面有很多的复杂的东西,今天暂时写到这里了

参考文献:https://blog.csdn.net/a910626/article/details/98893836

https://blog.csdn.net/weixin_52622200/article/details/114880502

相关文章

网友评论

    本文标题:Android IjkPlayer各状态解析

    本文链接:https://www.haomeiwen.com/subject/sojerltx.html