其他分享
首页 > 其他分享> > ExoPlayer播放器剖析(一)进入ExoPlayer的世界

ExoPlayer播放器剖析(一)进入ExoPlayer的世界

作者:互联网

一、前言

ExoPlayer播放器是一款Google推出的应用级播放器,其本质是调用了MediaCodec组件进行音视频的解码及播放。ExoPlayer的源码非常复杂,抽空看了几周的源码过后,决定以博客的形式将之前整理的笔记同大家分享,希望对于刚接触ExoPlayer的新人能有一定的帮助和指导作用,当然,本人能力有限,有些分析不对的地方也恳请大家指正。

先贴出一些重要的网址:

GitHub工程地址
ExoPlayer官方开发网址
ExoPlayer的API查询网址

二、官方资料总结:
exoplayer支持DASH、HLS、SmoothStreaming和Progressive类型的封装格式码流,前面三者都是基于Http的动态自适应技术流,后面一种我们通常用来播放本地流文件。

1.exoplayer的架构图如下:
exoplayer架构图
可以看到,exoplayer的运行机制是以组件间的交互来进行,上面的第一个图以网络流为例子展示exoplayer的内部运行原理,首先是由loader来协调DataSource和extractor,前者来识别MediaSource类型,后者用来解媒体封装,在获取了audio/video的元数据之后,分别送入到音视频的渲染器render中,render的功能展示在上二图,render中会去协下层的解码器进行解码,同时,将解码后的音频数据写入AudioTrack进行播放,视频数据写到Surface进行渲染。

2. ExoPlayer的状态机:
exoplayer播放器只存在下面四种状态:
exoplayer状态机

3.exoplayer相对于我们平时更为熟悉的MediaPlayer,又有何优缺点呢?

1.支持自定义和扩展播放器的能力,很多组件可以替换为自定义实现;
2.支持播放列表;
3.支持DASH和SmoothStreaming等动态自适应流;
4.使用硬件解码,将获得更多的解码能力及更强的解码性能,对应用开发人员而言,传统的MediaPlayer接口无从知晓framework层的播放器,而exoplayer则更为透明;
当然,缺点也是存在的,纯音频播放的耗能会增加,另外,对于轻量级的应用话裁剪也是有必要的;
从目前的趋势看,高版本的Android系统MediaCodec已经成为主流,故由官方亲自封装在其之上的exoplayer将会获得更多的青睐。

3.从官方文档来看,exoplayer支持的FFmpeg扩展仅限音频,这一点需要注意,对于想要扩展exoplayer中的FFmpeg不支持的音频和视频格式,就需要在framework层去大量下功夫了,包括mediacodec及更下面的omx。

4. 支持EXOplayer用例的最低安卓版本:
exoplayer对不同Android版本的内容支持
如果你想要在低版本运行exoplayer,请记得去翻看GitHub上release工程对应的文档说明,里面会有不同Android版本对应的release库版本。

5.更加简单的MediaItem:
在2.12以后的版本,mediasource改为了内部需要的实例,外部引用直接使用mediaitem就可以了,更精简的api将让我们更方便的写出测试demo,媒体清单可以自行添加,更改和删除,同时,提供了必要的api给开发查询mediaitem,反过来,构建mediaitem也可以通过URI或者metadata来实现,且播放列表支持随机播放,在EXOplayer的内部,mediaitem被转化成了mediasource进行具体的创建,在官方文档(点此链接),有简单介绍了传入mediasource类型之后如何去构建播放器的过程;

6.关于UI:
EXOplayer提供的view组件一共有四个:
官方对于UI的描述
PlayerView和PlayerControlView可以直接代替播放器调用播放器对应的控制方法。另外,在图层选择上,SurfaceView在很多方面由于TextureView,但是在AndroidN以下,exoplayer建议使用后者。

三、将ExoPlayer的官方demo跑起来:
将ExoPlayer的工程拉下来之后,我们直接用Android studio打开即可,需要注意的是,ExoPlayer整个大工程下面包含了demo,extension(扩展组件)和核心实现库等三部分主要内容:
exoplayer工程截图
可编译的apk有多个,我们主要以demo来熟悉exoplayer:
可编译apk

编译完成之后,安装到虚拟机或者手机上,就可以去测试播放了,这里的资源都是Google提供的,所以基本都需要翻墙才能下载下来:
apk运行界面
播放实测界面
总结:
这篇博客主要对exoplayer有一个简单介绍引入,并实测了官方的apk,下一个博客的内容将涉及到具体的代码,根据exoplayer提供给我们的api,我们将写一个简单的可运行demo。

标签:播放器,demo,解码,剖析,ExoPlayer,exoplayer,播放
来源: https://blog.csdn.net/achina2011jy/article/details/112602262