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

关联博客:

ExoPlayer播放器剖析(一)进入ExoPlayer的世界
ExoPlayer播放器剖析(二)编写exoplayer的demo
ExoPlayer播放器剖析(三)流程分析—从build到prepare看ExoPlayer的创建流程
ExoPlayer播放器剖析(四)从renderer.render函数分析至MediaCodec
ExoPlayer播放器剖析(五)ExoPlayer对AudioTrack的操作
ExoPlayer播放器剖析(六)ExoPlayer同步机制分析
ExoPlayer播放器剖析(七)ExoPlayer对音频时间戳的处理
ExoPlayer播放器扩展(一)DASH流与HLS流简介

一、前言

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。

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值