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

注意:
1、LoadControl.shouldContinueLoading控制是否继续加载。
2、调用setPlayWhenReady(true)其实最终也是调用了AudioTrack的play()
各个部分的作用:
Extractor(解析器):负责从媒体容器中提取音频和视频数据,如MP4、FLV等。它将输入的媒体文件解析成可供播放器使用的媒体样本。
DataSource(数据源):负责提供给解析器所需的数据。它可以从各种来源获取数据,例如网络、本地文件等。DataSource也负责处理数据缓存和读取速度控制。
MediaSource(媒体源):将Extractor和DataSource结合起来,代表要播放的媒体资源。它知道如何创建Extractor,并通过DataSource提供数据给Extractor。
MediaPeriod(媒体周期):表示整个媒体资源中连续的一部分时间范围,通常对应于一个音频或视频轨道。一个MediaPeriod包含一个或多个SampleQueue。
Timeline(时间线):描述了整个媒体资源的结构和时序信息。它告诉播放器媒体资源由多少个MediaPeriod组成以及每个MediaPeriod在时间上相对于其他MediaPeriod的位置。
Window(窗口):代表当前正在播放或即将播放的MediaPeriod以及与之相关联的其他信息,如DrmSession、窗口索引等。
Cache(缓存):用于将已下载的媒体数据缓存到本地磁盘上,以便下次播放时可以快速访问。Cache在DataSource和网络之间起到了缓冲的作用,提供了离线播放和快速加载的功能。
Renderer(渲染器):负责将解码后的音频或视频样本渲染到设备屏幕上进行实际播放。每个轨道都对应一个Renderer。
Track(轨道):代表媒体资源中的一条音频或视频流。可以有多个轨道,每个轨道由一个Extractor处理并传递给相应的Renderer进行渲染。
Decoder(解码器):用于将压缩的音频或视频样本解码成原始格式。每个轨道都需要对应的解码器来处理样本。
SampleQueue(样本队列):用于管理接收到的媒体样本,并按时间顺序进行排列和存储,以便Renderer可以从中获取要渲染的样本。
引用网上的架构图

若有不对请指正。
转载请标明出处: https://www.cnblogs.com/tangZH/p/17899131.html
ExoPlayer播放流程解析的更多相关文章
- MediaPlayer本地播放流程解析(一)
应用场景: MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setOnCompletionListener(new OnComplet ...
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- SSL/TLS算法流程解析
SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description ...
- TCP/IP协议三次握手与四次握手流程解析(转载及总结)
原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详 ...
- Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析
一.一个请求来到Django 的生命周期 FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...
- [MapReduce_3] MapReduce 程序运行流程解析
0. 说明 Word Count 程序运行流程解析 && MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图
- HBase - 数据写入流程解析
本文由 网易云发布. 作者:范欣欣 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻松 ...
- EurekaClient自动装配及启动流程解析
在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类 ...
- Mysql流程解析
Mysql流程解析 流程图 流程图解析 客户端发送一条sql语句. 1.此时,mysql会检查sql语句,查看是否命中缓存,如果命中缓存,直接返回结果,不继续执行.没有命中则进入解析器. 2.解析器会 ...
- Session (简介、、相关方法、流程解析、登录验证)
Session简介 Session的由来 Cookie虽然在一定程度上解决了"保持状态"的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能 ...
随机推荐
- React中事件的绑定
事件绑定 语法:on +事件名= { ()=>{ do something }} <!-- 点击事件 --> onClick={ () => { } } 注意的是:React采 ...
- js 保留两位小数不进行四舍五入
保留两位小数不进行四舍五入 // 保留小数n位,不进行四舍五入 // num你传递过来的数字, // decimal你保留的几位,默认保留小数后两位 app.config.globalProperti ...
- 一个神奇的golang技巧:扩大heap内存来降低gc频率
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 具体的文章请看:https://web.archive.org/web/ ...
- Docker部署Jekyll
1. 起因 前两天终于下单买了个域名,10年的使用期限.既然有了域名,那自己的博客就可以搞起来了. 现在博客的记录用的是Jekyll+Github Pages,所以决定之后自己的博客网站也采用Jeky ...
- C语言输出键盘
使用printf()函数输出样式 #include <stdio.h> int main() { printf("┌───┬───┬───┬───┬───┬───┬───┬─── ...
- windwos10任务栏居中
如下操作 新建一个文件夹如图 然后出现这个重右往左一直拖然后拉出来就行了如图 拖不动或者没有的把这个关了-锁定任务栏 文字如何隐藏? 在这个文字旁边右击关闭标题即可 然后锁定任务栏就OK了
- python2和python3的版本历史及入门书籍
python版本历史 我们端游项目使用是python2.7版本 32位 python2 2.7.18 last version on 2020.4.20 2.7 first version on 20 ...
- React中引入外部js文件
假设需要引入本地的一个jquery库: <script src="http://127.0.0.1:8080/plugins/jquery.min.js" type=&quo ...
- Gitee一个仓库存储多个项目
需求: 平时会做一些小项目,有时候一个小项目就几行代码,十几K的项目,给这些小项目建一个库保存太奢侈了太浪费了,所以换个思路,根据项目类型来创建库,然后每个小项目以孤立分支的方式存到该库中,这 ...
- Intel酷睿Ultra隆重登场:28W能效逆天!AI性能领先竞品5.4倍
作为Intel 1971年首款微处理器4004诞生以来变革幅度最大的产品,代号Meteor Lake的第一代酷睿Ultra今天终于正式发布了!相关笔记本.迷你机产品也会陆续发布上市. 有关于酷睿Ult ...