音视频---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等等.),有需要的可以自行添加哦!~
标签:播放器,状态,end,ijkplayer,idlerelease,音视频,---,API,线程 来源: https://blog.csdn.net/weixin_52622200/article/details/114880502