播放器 FijkPlayer 文档 20190812 雨夜更新。
原文在 fijkplayer.befovy.com/docs/zh/fij…
下次更新文档是 FijkView 裁剪和填充模式。
播放器 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
| API名称 |
目标状态 |
| setDataSource() |
initialized |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| prepareAsync() |
asyncPreparing |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| 处理完成 |
prepared |
| 出现错误 |
error |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| seekTo() |
prepared |
| start() |
started |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| seekTo() |
started |
| start() |
started |
| pause() |
paused |
| stop() |
stopped |
| 播放完成 |
completed |
| 出现错误 |
error |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| seekTo() |
paused |
| start() |
started |
| pause() |
paused |
| stop() |
stopped |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| seekTo() |
paused |
| start() |
started (从头开始) |
| pause() |
paused |
| stop() |
stopped |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| stop() |
stopped |
| prepareAsync() |
asyncPreparing |
| reset() |
idle |
| release() |
end |
| API名称 |
目标状态 |
| reset() |
idle |
| release() |
end |