ExoPlayer
文章平均质量分 96
分析和学习ExoPlayer源码
山雨楼
山雨雨来风满楼
展开
-
ExoPlayer架构详解与源码分析(13)——TeeDataSource和CacheDataSource
书接上回,继续贴下上文的蜘蛛网铺垫了那么多的基础,本篇终于可以来分析下CacheDataSource,上篇重点讲完了图的Cache的下半部分,而将Cache和CacheDataSource关联起来的是一个叫TeeDataSource特殊DataSource。到这里整个DataSource部分就全部结束了,下一篇计划通过ProgressiveMediaPeriod,把SampleQueue,Loder和DataSource贯穿,面向整体讲下他们之间如何协调运作的。版权声明 ©。原创 2024-04-09 08:30:00 · 934 阅读 · 2 评论 -
ExoPlayer架构详解与源码分析(12)——Cache
好了基本的介绍完了,现在可以介绍和了。先看下整体结构:上图这里假设CacheDataSource原始的上游数据是通过OkHttpDataSource从网络获取看完上图,是不是感觉非常复杂,没关系我们可以拆解出几个独立的结构一步步了解,可以看到底层的Cache可以作为一个独立的结构,在说CacheDataSource和TeeDataSource前,先把Cache这个基础先了解下。原创 2024-03-25 09:01:15 · 1211 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(11)——DataSource
好久不见各位,间隔了一段时间忙项目,终于有时间补上ProgressiveMediaPeriod最后一块拼图——DataSource。间隔太久先来个前情回顾。原创 2024-03-22 08:30:00 · 987 阅读 · 3 评论 -
ExoPlayer架构详解与源码分析(10)——H264Reader
TsExtractor解封完TS数据后,会根据payload中的视频类型使用指定Reader继续解析,如果payload是H.264格式,就会使用H264Reader来继续解析PES payload部分视频数据流。原创 2023-12-06 10:01:47 · 1019 阅读 · 2 评论 -
ExoPlayer架构详解与源码分析(9)——TsExtractor
上篇说完了Extractor的整体结构,本篇将详细讲解Extractor的实现,主要通过TsExtractor这个实现类来讲解,顾名思义TsExtractor是用于TS容器格式的解析器。TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。MPEG组织于1994年推出MPEG-2压缩标准,以实现视/音频服务与应用互操作的可能性,MPEG-2标准是针对标准数字电视和高清晰度电视在各种应用下的压缩方案和系统层的详细规定。原创 2023-11-17 11:50:51 · 913 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(8)——Loader
ProgressiveMediaPeriod的左半部分SampleQueue已经在上篇讲完,相对今天说的这部分还算简单,ProgressiveMediaPeriod右半部分主要为Loader,而Loader中及包含数据的获取也包含数据的解析,本篇主要分析Loader的整体机构和数据解析部分结构。原创 2023-11-15 14:20:57 · 910 阅读 · 3 评论 -
ExoPlayer架构详解与源码分析(7)——SampleQueue
ProgressiveMediaPeriod中的SampleQueue部分相对其他部分,结构相对完整独立,没有像加载媒体那部分拆分出很多其他的概念,所以优先了解下SampleQueue。本篇主要解答媒体数据是如何在播放器内部缓存的,以及ExoPlayer是如何保证这些数据稳定高效的读写。原创 2023-11-15 13:52:19 · 1616 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(6)——MediaPeriod
上篇看完了MediaSource,发现其中正在发挥作用的是其中的MediaPeriod,如果MediaSource是燃料系统的外壳,那么MediaPeriod就是其外壳下的核心原创 2023-10-23 17:43:01 · 608 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(5)——MediaSource
上篇说完整体架构,这里开始分析其中的各个组件,先从MediaSource看起,继续拿运载火箭做对比,MediaSource在整个运载火箭中的角色就类似于燃料系统,确保火箭顺利升空,燃料系统是其中重要的一环,需要能在运行过程从持续稳定的提供燃料。ExoPlayer也一样,为了保证能够持续的渲染出媒体内容,就得保证MediaSource持续稳定提供需要的数据。没了就这么多,燃料系统这么简陋的吗?当然不会,因为它把除了Timeline的管理维护之外的几乎所有的工作都交给别人来完成了,它就是下面要重点讲的。原创 2023-10-16 14:47:56 · 1298 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(4)——整体架构
想要直接实现Player接口需要非常复杂的代码逻辑,都写在一个类里肯定不现实,需要通过更多层次的扩展简化来实现,当然ExoPlayer就是这么做的,本篇来讲讲的如何通过BasePlayer来简化设计以及ExoPlayer如何将整个复杂的设计划分给一个个子系统来完成的。可以看到EoxPlayer架构的高度可定制化,基本每一个组件都可以在创建时自定义,然后注入到播放器中实现自定义的播放器。原创 2023-10-09 10:02:35 · 1116 阅读 · 1 评论 -
ExoPlayer架构详解与源码分析(3)——Timeline
如果播放器就是一只火箭,那么火箭发射就必须要有一个基于时序的发射计划,火箭在运行过程中通过获取当前时间点的发射计划就会知道当前的时序状态,以及决定下一步该干什么,如需要在什么时候点火、发动机什么时候停机、各个阶段的姿态调整等等。所以设计了播放器还是不够的,还需要描述出媒体的时序结构,但是播放器播放的媒体种类有很多,可以是一个播放列表、一个mp4文件、一个网络的url,一段视频的流,反正千奇百怪。如何设计一个数据结构可以灵活的表示出上面各种的媒体在不同时间点的时序结构呢。原创 2023-10-06 10:33:27 · 702 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(2)——Player
如果让你去开发一款播放器,第一步当然想到的就是设计。使用面向对象的思路,去确定ExoPlayer应该具有哪些功能,对外暴露哪些操作,需要解决哪些问题。原创 2023-09-26 14:14:01 · 898 阅读 · 0 评论 -
ExoPlayer架构详解与源码分析(1)——前言
现在ExoPlayer 现在已经正式入编,合并到了Androidx 的media3中,而且该项目还在持续更新完善中,可见官方对其还是比较重视的。原创 2023-09-25 21:09:17 · 521 阅读 · 0 评论 -
ExoPlayer 源码阅读小记--缓存模块及获取HLS已缓存大小
基于ExoPlayer 2.17.1源码分析:首先回到上一篇文章里第一次涉及到缓存的地方:调用StatsDataSource封装的CacheDataSource,这里会调用TeeDataSource 的open,Tees翻译就是三通的意思,这是个一进二出的三通,一个水龙头冷水进,一路进小厨宝缓存加热后出,一路直接水龙出//TeeDataSourcepublic long open(DataSpec dataSpec) throws IOException { bytesRemaining =原创 2022-05-24 20:19:18 · 1073 阅读 · 0 评论 -
ExoPlayer 源码阅读小记--音视频数据流分析
基于ExoPlayer 2.17.1源码分析,分析下音视频数据是如何到播放器播放的原创 2022-06-10 17:22:42 · 680 阅读 · 0 评论 -
ExoPlayer 源码阅读小记--HLS播放带缓存加载M3U8文件过程
基于ExoPlayer 2.17.1源码分析原创 2022-05-23 11:11:31 · 2528 阅读 · 2 评论