播放器状态

 

播放器 FijkPlayer / ijkplayer 内存在不同的状态。通过 API 调用实现状态的跳转。
下图绘制了播放器中所有的状态,以及主要的涉及状态跳转的 API 调用。

状态转换图

图中实线箭头连接的状态变化通过 API 调用完成,
虚线箭头连接的状态变化是通过 播放器内部执行完特定任务或者发生错误 而自动发生的状态变化。

state_of_ijkplayer

状态释义

状态名 播放器表现
idle 闲置状态,刚完成构造的 FijkPlayer 处于此状态。
此状态下播放器占用少量内存,无额外线程启动。
idle 状态只能通过 setDataSource 转换为 initialized 状态
initialized 初始化完成状态,和 idle 状态相比,仅是多了输入媒体数据源的信息。 同样无额外线程打开。
asyncPreparing 异步准备状态,在 initialized 状态调用 prepareAsync 到达此状态。
这不是一个稳定状态,此状态等待特定任务完成后自动转化为 prepared 状态。
这一状态的主要准备工作是 探测媒体文件类型,打开媒体文件,打开解码器以及新建解码线程,新建数据 read 线程,打开音频输出设备,新建视频输出线程等。
prepared asyncPreparing 完成指定任务后自动转化为此状态。
此状态下已经开始缓冲解码了一部分音视频数据,可以随时进行播放。
started 媒体(视频、音频)正在播放中。
paused 媒体(视频、音频)播放暂停。
completed 媒体(视频、音频)播放完成。 可重新从头开始播放。
stopped 播放器各种线程占用资源都已经释放。 音频设备关闭。
end 播放器中所有需要手动释放的内存都释放完成。
处于此状态的播放器只能等待垃圾回收进行内存释放。
error 播放器出现错误。

可播放状态

prepared、 started、 paused、 completed。
可播放状态中可以通过调用 start 转化为 started 状态,并且进行媒体播放。

稳定状态

idle、 initialized、 prepared、 paused、 completed、 stopped、 end、error。
稳定状态只可以通过 API 调用转换为其他的状态,不会自主发生状态变化。

非稳定状态

asyncPreparing、 started。
非稳定状态会在一定条件下自动转变为其他状态,也可以通过 API 调用进行状态跳转。

完整转换 API

  • idle
API名称 目标状态
setDataSource() initialized
reset() idle
release() end
  • initialized
API名称 目标状态
prepareAsync() asyncPreparing
reset() idle
release() end
  • asyncPreparing
API名称 目标状态
处理完成 prepared
出现错误 error
reset() idle
release() end
  • prepared
API名称 目标状态
seekTo() prepared
start() started
reset() idle
release() end
  • started
API名称 目标状态
seekTo() started
start() started
pause() paused
stop() stopped
播放完成 completed
出现错误 error
reset() idle
release() end
  • paused
API名称 目标状态
seekTo() paused
start() started
pause() paused
stop() stopped
reset() idle
release() end
  • completed
API名称 目标状态
seekTo() paused
start() started (从头开始)
pause() paused
stop() stopped
reset() idle
release() end
  • stopped
API名称 目标状态
stop() stopped
prepareAsync() asyncPreparing
reset() idle
release() end
  • error
API名称 目标状态
reset() idle
release() end
  • end
API名称 目标状态
release() end

您的支持是我的动力。你可以通过以下方式支持我:

  • 给该项目点赞   给该项目点赞
  • 关注我的 Github   关注我的 Github
微信赞赏码 支付宝
微信赞赏码 支付宝二维码