参考文档:
github官网
github官网开发文档
入门
媒体类型
高级主题
源码分析:
exoplayer-core:核心功能(必需)。
exoplayer-dash:支持DASH内容。
exoplayer-hls:支持HLS内容。
exoplayer-smoothstreaming:支持SmoothStreaming内容。
exoplayer-ui:用于ExoPlayer的UI组件和资源。
exoplayer的库总共分上面5种,我们先看exoplayer-ui,exoplayer-core
这两个好理解一点,很多人应该和我一样,不是很理解另外三个是干嘛的;
三个比较关键的类:
三者之间的关系如上
从PlayerView出发来看,下面舒PlayerView的代码
PlayerView:用于关联PlayerControlView,SurfaceView/TextureVIew, Player
PlayerControlView:exoplayer默认的控制器,包含播放,暂停,进度条展示
Player:播放器,实际去解码并播放视频资源的
surfaceView:显示器,可以是SurfaceView也可以是TextureView
surfaceView分析:
从上图可以看出,默认是创建一个SurfaceView,
surfaceType通过xml指定,如下:
最后在和player进行绑定
PlayerView分析
从构造方法可以看出,默认加载layout.exo_player_view这个布局,如果
在xml中指定了其他layout,则会加载指定的布局
exo默认的布局exo_player_view中是没有exo_control这个id的,所以一般是需要new PlayerControlView布局的;
PlayerControlView分析:
PlayerControlView默认使用exo_player_control_view布局;
从布局的id也大概能猜到她的作用是控制视频翻页,循环,随机,播放,暂停,再看代码:
通过代码可以看出,每一个id都做了判空处理,所以我们想自定义一个控制界面,只需要保持功能按钮的id和exo_player_control_view一致,ui切换即可,非常方便;
player分析
SimpleExoPlayer继承BasePlayer类实现Player接口,也是我们的主角;
播放器一般需要做的事情是对视频资源进行加载,编解码,播放;
Player提供了对MediaItem的操作接口
ExoPlayer提供了对MediaSource的操作接口
SimpleExoPlayer即实现了对MediaItem也实现了对MediaSource的操作
MediaItem: 播放的单元,一般是一个文件或url
MediaSource: 代表可以被ExoPlayer播放的媒体,一般关联TimeLine用于定义媒体的结构
此处的解释中,MediaSource多了一个媒体结构,这个功能非常重要;