重点内容:
-
理解播放器的框架
-
理解播放器的状态转换(后续章节继续深⼊讲解,这⾥先理解个⼤概即可)
-
理解播放器的代码逻辑
1 模块分析
![](https://img.haomeiwen.com/i2229471/31763d5d537e09d9.png)
![](https://img.haomeiwen.com/i2229471/4b18776bcc37ec93.png)
2 播放器状态转换
播放器状态我们参考成熟的ijkplayer的状态转换实现。
状态转换图
注意图中的线条:
实线箭头连接的状态变化通过 API 调⽤完成,
虚线箭头连接的状态变化是通过 播放器内部执⾏完特定任务或者发⽣错误 ⽽⾃动发⽣的状态变化。
![](https://img.haomeiwen.com/i2229471/0dfbf37c9e4c952f.png)
状态释义
![](https://img.haomeiwen.com/i2229471/b16f763e8cb50968.png)
可播放状态
prepared、 started、 paused、 completed。
可播放状态中可以通过调⽤ start函数 转化为 started 状态,并且进⾏媒体播放。
稳定状态
idle、 initialized、 prepared、 paused、 completed、 stopped、 end、error。
稳定状态只可以通过 API 调⽤转换为其他的状态,不会⾃主发⽣状态变化。
⾮稳定状态
async_preparing、 started。
⾮稳定状态会在⼀定条件下⾃动转变为其他状态,也可以通过 API 调⽤进⾏状态跳转。
完整转换 API
idle
![](https://img.haomeiwen.com/i2229471/923986aad08f77e2.png)
initialized
![](https://img.haomeiwen.com/i2229471/940a3a218813440c.png)
async_preparing
![](https://img.haomeiwen.com/i2229471/edb91fdf4b2d936a.png)
prepared
![](https://img.haomeiwen.com/i2229471/dcec97f7bb40b51a.png)
started
![](https://img.haomeiwen.com/i2229471/be56695c36ada948.png)
paused
![](https://img.haomeiwen.com/i2229471/99e8dde742c393d0.png)
completed
![](https://img.haomeiwen.com/i2229471/3da05b94f198b14b.png)
stoped
![](https://img.haomeiwen.com/i2229471/b516e34ba237b486.png)
error
![](https://img.haomeiwen.com/i2229471/183aa54824bb7b5e.png)
end
![](https://img.haomeiwen.com/i2229471/dabc1b8921c6560f.png)
3.参考
https://blog.csdn.net/weixin_52622200/article/details/114880502
网友评论