状态机设计
player interface 基于状态机设计,状态转换如图
状态机说明:
-
- IDLE
-
闲置状态,刚创建完 player 处于此状态,此状态只能通过 aic_player_set_uri 转换为 INITIALIZED
-
- INITIALIZED
-
初始化完成状态,和 IDLE 状态相比,仅仅是多了媒体数据源的信息
-
- PREPARING
-
在 INITIALIZED 状态调用异步 aic_player_prepare_async 到达此状态,这一状态主要是打开媒体文件并解析它,解析成功之后,自动转换为 PREPARED 状态,通过事件 AIC_PLAYER_EVENT_DEMUXER_FORMAT_DETECTED 告知 app
-
- PREPARED
-
在 INITIALIZED 状态调用同步 aic_player_prepare_sync 到达此状态,这一状态主要是打开媒体文件并解析它,解析完成后转换到 PREPARED 状态
-
- STARTED
-
在 PREPARED 状态调用 aic_player_start 到达此状态,这一状态主要是根据解析出的文件创建音视频解码线程和音视频显示线程,可以随时进行播放了
-
- PLAYING
-
在 STARTED 或 PAUSED 状态调用 aic_player_play 到达此状态,开始播放媒体
-
- PAUSED
-
在 PLAYING 状态调用 aic_player_pause 到达此状态,暂停播放媒体
-
- COMPLETED
-
媒体播放完毕后,自动转换为 COMPLETED 状态,并以事件 AIC_PLAYER_EVENT_PLAY_END 告知 app
-
- STOPPED
-
无论处于任何状态都可以调用 aic_player_stop 回到 STOPPED 状态。切换文件时,无论是否播放结束,要先调用 aic_player_stop 停止当前文件的播放。
-
- END
-
这里 END 表示释放掉播放器所有的资源,不是播放器的内部状态。