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