ExoPlayer架构详解与源码分析(1)——前言

系列文章目录


前言

之前通过几篇源码阅读横向的分析了ExoPlayer HLS相关的源码,那时候ExoPlayer还是独立的库,现在ExoPlayer 现在已经正式入编,合并到了Androidx 的media3中,而且该项目还在持续更新完善中,可见官方对其还是比较重视的。后面希望通过一些列文章基于media3 1.1.0版本源码(GitHub)纵向分析下ExoPlayer。

为什么选择ExoPlayer

Android媒体播放器那么多,为什么选择分析学习ExoPlayer呢,不是因为它性能有多好,其他C/C++写的媒体播放器性能高的大有人在,而恰恰因为实现的语言才选择ExoPlayer,ExoPlayer可以说是纯Java实现的,在语言性能先天劣势的情况下如何实现高性能的播放,这才是其中值得学习的地方。另外也得益于Java代码的实现,ExoPlayer达到高度的可定制化,可以说媒体从加载到解析播放整个过程,几乎每一个细节处理都可以实现自定义。对于Android开发来说这无异于提供了巨大的方便,无论是自定义功能实现、bug定位处理、性能优化,都在Java层。而要最大发挥ExoPlayer的这些优势,首先你得了解它是如何运作的。ExoPlayer中涉及到很多的设计思路和架构思想。无论从技术优势和学习的角度去考虑,ExoPlayer 都是值得去好好学习和研究的。

学习计划

ExoPlayer项目结构还是比较庞大的,包含了主工程和相应的扩展库,这里我们主要关注主工程的源码,另外播放UI界面相关的代码不在讨论范围内。主要关注播放器的内部实现,大致分为以下几步来分析学习:

  1. 首先会从全局看下Exo的整体设计目标和架构,还有些全局的概念介绍。
  2. 接着会分别单独分析Exo的4大组件MediaSource、Renderers、TrackSelector、LoadControl。
  3. 还会了解4大组件的组成和运作及其相关类,其中MediaSource将是重点对象。
  4. 最后通过将所有的组件联合起来,了解播放器是如何协调这些组件完成视频播放的。

本系列主要针对ExoPlayer已经有过使用,有了基本了解,想深入源码架构层面了解的读者。所以不会有ExoPlayer接入使用相关的内容,这部分建议读者去看ExoPlayer的官方文档。后续文章采用文字描述、图片、源码3者相结合的方法来解析ExoPlayer。其中源码会截取使用ExoPlayrer重要的部分,添加详细的的注释,所以注释也是文章的重要部分。


文章在其他平台也会同步更新,内容图片中的水印可能会重叠显示其他平台的水印


版权声明 ©

本文为作者山雨楼原创文章

转载请注明出处

原创不易,觉得有用的话,收藏转发点赞支持

posted @ 2023-10-06 10:39  山雨楼  阅读(557)  评论(0)    收藏  举报  来源