Exoplayer架构图
架构实现流程
-
Exoplayer 在prepare() 后会开启一个定时轮询,执行下面的行为
1.1 寻找已经设置给Exoplayer的播放源(MediaSource), 打开播放源,读取媒体流
1.1.1. 外部创建MediaSource, 为MediaSource找到保存的地方 (封装后被在ExoPlayerImplInternal 类的 mediaSourceList 中) 1.1.2 打开MediaSource, 开启线程读取媒体流 1.1.3 媒体流被送到Extrator中解析出未解码器的音视频数据 1.1.4 解析出的音视频数据被保存到内存缓存中,等待渲染器读取(SampleQueue)
-
如果没有打开渲染器Renderer(视频,音频,文字等渲染), 打开渲染器
2.1 打开视频渲染器, 音频渲染器 2.1.1 初始化和配置MediaCodec 2.1.2 开启死循环, 从内存缓存中读取未解码音视频数据渲染
-
校验各种条件,设置播放状态