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本身保存在客户端,可能 ...
随机推荐
- 使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理
背景 在上一篇文章中,我们已经了解到华为即将发布的鸿蒙操作系统纯血版本--鸿蒙 Next,以及各个互联网厂商开展鸿蒙应用开发的消息.其中,Taro作为一个重要的前端开发框架,也积极适配鸿蒙的新一代语言 ...
- ios马甲包过审
说明:这篇文章写的比较早了,大概是2021年上半年写的,一直放在草稿箱,目前这些方法是否被屏蔽有待验证. App Store审核机制 机器审核 人工审核 人工审核大概是玩15分钟的样子,同时有上百审核 ...
- 若依、vue三级路由缓存失败
router.beforeEach((to, from, next) => { NProgress.start() if (getToken()) { // 三级菜单组件无法缓存问题 if (t ...
- Github搜索代码技巧
↵相关链接: 码云(gitee)配置SSH密钥 码云gitee创建仓库并用git上传文件 git 上传错误This oplation equires one of the flowi vrsionso ...
- C/C++ 关于继承与多态笔记
继承的基本语法: 继承的目的就是用于提高代码的可用性,减少代码的重复内容,高效开发. #include <iostream> using namespace std; class Base ...
- 在IntelliJ IDEA中,开发一个摸鱼看书插件
作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/R8qvoSNyedVM95Ty8sbhgg 沉淀.分享.成长,让自己和他人都能 ...
- Python常用脚本-查询数据库,调用网站接口,下载文件保存到本地
# coding=utf-8 # 证照模板下载,查询中心库,调用网站接口,下载文件保存到本地 import requests import json import datetime import xl ...
- AIX6.1修改时区/修改时间
环境 AIX6.1 修改时间 格式:date -n mmddHHMMYY #mm表示月分,dd表示日期,HH表示小时,MM表示分钟,YY表示年份. 例子:date -n 1204171622 #修 ...
- 蓝鲸单机离线部署:app_mgr组件安装失败解决
之前在腾讯蓝鲸智云-单机离线部署测试中,遇到了几个安装问题,本文记录下3.2 app_mgr组件安装失败 的解决过程,因为这个问题卡了很久(可能也是因为笔者对python相关知识和蓝鲸产品不够熟悉), ...
- Qt processEvents - 解决线程中事件阻塞(如槽函数被阻塞)
百度了一会,发现没太有文字讲这件事情,因此整理成文字记录一下. processEvents介绍 长时间运行的操作可以调用processEvents() 保持应用程序响应能力. void QCoreAp ...