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

注意:

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可以从中获取要渲染的样本。

引用网上的架构图

若有不对请指正。

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

ExoPlayer播放流程解析的更多相关文章

  1. MediaPlayer本地播放流程解析(一)

    应用场景: MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setOnCompletionListener(new OnComplet ...

  2. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  3. SSL/TLS算法流程解析

    SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description ...

  4. TCP/IP协议三次握手与四次握手流程解析(转载及总结)

    原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式  TCP/IP协议的详 ...

  5. Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析

    一.一个请求来到Django 的生命周期   FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...

  6. [MapReduce_3] MapReduce 程序运行流程解析

    0. 说明 Word Count 程序运行流程解析 &&  MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图

  7. HBase - 数据写入流程解析

    本文由  网易云发布. 作者:范欣欣 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻松 ...

  8. EurekaClient自动装配及启动流程解析

    在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类 ...

  9. Mysql流程解析

    Mysql流程解析 流程图 流程图解析 客户端发送一条sql语句. 1.此时,mysql会检查sql语句,查看是否命中缓存,如果命中缓存,直接返回结果,不继续执行.没有命中则进入解析器. 2.解析器会 ...

  10. Session (简介、、相关方法、流程解析、登录验证)

    Session简介 Session的由来 Cookie虽然在一定程度上解决了"保持状态"的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能 ...

随机推荐

  1. 日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

    前言 随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息.因此,作为工程师,了解主流的日志记录框架非常重要.虽然应用程序的运行结果 ...

  2. Fabric区块链浏览器(1)

    本文是区块链浏览器系列的第三篇,本文介绍区块链浏览器的主体部分,即区块数据的解析. 这一版本的区块链浏览器是基于gin实现的,只提供三种接口: /block/upload:POST,上传Protobu ...

  3. 5.14 汇编语言:仿写Switch选择结构

    选择结构,也称为switch语句,是计算机编程中的一种控制结构,用于根据表达式的值选择不同的执行路径.它允许程序根据表达式的值来决定执行哪个代码块,从而实现多分支选择逻辑.switch语句由一个表达式 ...

  4. 整个小东西,在IDEA中自动生成PO、DAO、Mapper

    作者:小傅哥 博客:https://bugstack.cn 源码:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有所收获! ...

  5. SpringCloud-05-Gateway

    统一网关Gateway 1.为什么需要网关 网关功能: 身份认证和权限校验 服务路由.负载均衡 请求限流 2.网关的技术实现 在SpringCloud中网关的实现包括两种: gateway zuul ...

  6. linux(centos) 下搭建svn服务器

     1. 使用yum安装svn yum -y install subversion 安装完成之后,验证安装结果 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看svn安 ...

  7. Java 中,byte 数据类型的取值范围为什么是 -128 - 127 ?其它数值类型 都雷同

    byte 的取值范围:-128 - 127 基本的数学计算方法,一个byte占8位,第一位为符号位,还有7位,7位能表示最大为:2^7 - 1 怎么来的呢:看如下数学计算 1111 111 = 2^0 ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 Host)--学习笔记

    2.2.4 核心模块--Host 什么是 Host Host 的默认配置做了哪些事情 框架提供的服务 HostedService 后台服务 ASP.NET Core Web 主机:https://do ...

  9. MySQL-CDC原理与实践

    MySQL CDC (Change Data Capture),中文名为MySQL变化数据捕获,是一种截取MySQL主从复制流中binlog的技术,从而实时捕获数据库中的增.删.改操作.在大数据.实时 ...

  10. Linux中单引号和双引号的区别

    区别:单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用:而双引号属于弱引用,它会对一些被引起来的字符进行特殊处理.简单来说,单引号直接输出内部字符串,不解析特 ...