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本身保存在客户端,可能 ...
随机推荐
- 玩一玩 golang 汇编(二)
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 上次玩 golang 汇编是使用了一个 python 的 ...
- Go中字符串处理:fmt.Sprintf与string.Builder的比较
在Go语言中,我们通常会遇到两种主要的方式来处理和操作字符串:使用fmt.Sprintf函数和string.Builder类型.尽管两者都可以实现字符串的格式化和连接,但它们在性能和用法上有一些关键区 ...
- TienChin 活动管理-添加活动接口
ActivityController @PreAuthorize("hasPermission('tienchin:activity:create')") @Log(title = ...
- 8.1 C++ STL 变易拷贝算法
C++ STL中的变易算法(Modifying Algorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入.删除.替换等操作.这些算法同样定义在头文件 <algor ...
- Mac 和 windows上 好用的截图 工具 Snipaste
Snipaste 官网:https://zh.snipaste.com/ ========================= 使用方法,比较简单,可以官网查看
- Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
目录 简介 Asp .Net Core 集成 Panda.DynamicWebApi 配置 原理 什么是POCO Controller? POCO控制器原理 ControllerFeatureProv ...
- ubuntu之jupyter notebook配置
ubuntu之jupyter notebook配置 安装jupyter: 前提:安装pip pip install jupyter jupyter notebook 配置: 生成配置文件: jupyt ...
- NC19429 红球进黑洞
题目链接 题目 题目描述 在心理疏导室中有一种奇特的疏导工具,叫做红球.红球被提前分为了许多正方形小方格. 每当有人来找ATB做心理疏导时,ATB就会让他去先玩红球,然后通过红球小格方的高度来判断一个 ...
- Android架构组件LiveData
LiveData LiveData是基于观察者模式创建的,其中,LiveData是被观察者,观察者通过注册方法,监听被观察者的数据变化.LiveData在数据发生变化的时候,会通知观察者. LiveD ...
- XTW100编程器在Win10下的安装
XTW100 这是一个淘宝上卖得很多的经典编程器, 用于写入24和25系列的存储芯片. 最初使用的是stm32f103c8t6, 因为f103价格飞涨, 市面上大都换成国产的兼容mcu了, 软件和使用 ...