Loading

ExoPlayer播放流程解析

ExoPlayer的播放解析流程如下(以音频为例):

image

注意:
1、LoadControl.shouldContinueLoading控制是否继续加载。
2、调用setPlayWhenReady(true)其实最终也是调用了AudioTrack的play()

各个部分的作用:

  1. Extractor(解析器):负责从媒体容器中提取音频和视频数据,如MP4、FLV等。它将输入的媒体文件解析成可供播放器使用的媒体样本。

  2. DataSource(数据源):负责提供给解析器所需的数据。它可以从各种来源获取数据,例如网络、本地文件等。DataSource也负责处理数据缓存和读取速度控制。

  3. MediaSource(媒体源):将Extractor和DataSource结合起来,代表要播放的媒体资源。它知道如何创建Extractor,并通过DataSource提供数据给Extractor。

  4. MediaPeriod(媒体周期):表示整个媒体资源中连续的一部分时间范围,通常对应于一个音频或视频轨道。一个MediaPeriod包含一个或多个SampleQueue。

  5. Timeline(时间线):描述了整个媒体资源的结构和时序信息。它告诉播放器媒体资源由多少个MediaPeriod组成以及每个MediaPeriod在时间上相对于其他MediaPeriod的位置。

  6. Window(窗口):代表当前正在播放或即将播放的MediaPeriod以及与之相关联的其他信息,如DrmSession、窗口索引等。

  7. Cache(缓存):用于将已下载的媒体数据缓存到本地磁盘上,以便下次播放时可以快速访问。Cache在DataSource和网络之间起到了缓冲的作用,提供了离线播放和快速加载的功能。

  8. Renderer(渲染器):负责将解码后的音频或视频样本渲染到设备屏幕上进行实际播放。每个轨道都对应一个Renderer。

  9. Track(轨道):代表媒体资源中的一条音频或视频流。可以有多个轨道,每个轨道由一个Extractor处理并传递给相应的Renderer进行渲染。

  10. Decoder(解码器):用于将压缩的音频或视频样本解码成原始格式。每个轨道都需要对应的解码器来处理样本。

  11. SampleQueue(样本队列):用于管理接收到的媒体样本,并按时间顺序进行排列和存储,以便Renderer可以从中获取要渲染的样本。

引用网上的架构图

image

若有不对请指正。

转载请标明出处: https://www.cnblogs.com/tangZH/p/17899131.html

posted @ 2023-12-13 15:24  妖久  阅读(468)  评论(0编辑  收藏  举报