ijkplayer状态图
从源码和注释信息中,我们可以得到下面的状态图
IDEL
初始状态/空状态。
转化条件
- 创建IjkMediaPlayer对象。
- 除了END状态以外的任意状态下调用reset()方法。
可转化为
- 调用setDataSource()方法转化为INITIALIZED状态。
- 调用release()方法转化为END状态。
INITIALIZED
初始化成功。
转化条件
- IDEL状态下调用setDataSource()方法。
可转化为
- 调用prepareAsync()方法转化为ASYNC_PREPARING状态。
- 调用reset()方法转化为IDEL状态。
- 调用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状态。
STOPPED
结束工作。
转化条件
- STARTED状态下调用stop()方法。
- PAUSED状态下调用stop()方法。
- COMPLETED状态下调用stop()方法。
可转化为
- 调用prepareAsync()方法转化为ASYNC_PREPARING状态。
- 调用reset()方法转化为IDEL状态。
- 调用release()方法转化为END状态。
COMPLETED
工作正常完成。
转化条件
- STARTED状态下流正常中止。
可转化为
- 调用start()方法转化为STARTED状态。
- 调用stop()方法转化为STOPPED状态。
- 调用reset()方法转化为IDEL状态。
- 调用release()方法转化为END状态。
ERROR
出现错误。
转化条件
- 调用prepareAsync()方法时出错。
- 调用start()方法时出错。
可转化为
- 调用reset()方法转化为IDEL状态。
- 调用release()方法转化为END状态。
END
最终状态,不可逆。
转化条件
- 任意状态下调用release()方法。
可转化为
不可转化,此状态下的MediaPlayer不能再使用,必须重新创建。