音视频---ijkplayer 播放器状态解析

ijkplayer 播放器状态解析

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

状态转换图

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

状态释义

状态名 播放器表现
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

技术交流群:【960994558】整理了一些个人觉得比较好的学习书籍、大厂面试题、和热门技术教学视频资料共享在里面(包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等.),有需要的可以自行添加哦!~
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_52622200/article/details/114880502