ExoPlayer是个什么高大上的东西?怎么用?如何用?有哪些优缺点?相比IjkPlayer和Viatimo有那些区别?
ExoPlayer是什么?
ExoPlayer是一个开源媒体播放器,App等级的媒体API。
ExoPlayer的优缺点:
ExoPlayer相较于MediaPlayer有很多很多的优点:
- 支持动态的自适应流HTTP(DASH) 和 平滑流,任何目前MediaPlayer支持的视频格式(同时它还支持HTTP直播了(HLS),MP4,MP3,WebM,M4A,MPEG-TS 和 AAC).
- 支持高级的HLS特性,例如正确处理 EXT-X-DISCONTINUITY 标签;这个后面会举例。
- 支持自定义和扩治你的使用场景。ExoPlayer专门为此设计;
- 便于随着App的升级而升级。因为ExoPlayer是一个包含在你的应用中的库,对于你使用哪个版本有完全的控制权,并且你可以简单的跟随应用的升级而升级;
- 更少的适配性问题。
值得注意的时,ExoPlayer同时有些缺点:
- ExoPlayer的音频和视频组件依赖Android的 MediaCodec接口,该接口发布于Android4.1(API 等级16)。因此它不能工作于之前的Android版本。
- ExoPlayer目前还不支持自动检查需要播放的媒体格式。应用需要知道他想要播放的媒体格式去构建一个ExoPlayer去播放媒体。
ExoPlayer的使用方法:
如果需要使用ExoPlayer,你需要执行以下几步:
1. 添加依赖
2. 创建player
3. 关联视图
4. 准备播放
5. 释放
1. 添加依赖到项目中:
在project的build.gradle中添加:
repositories {
jcenter()
}
在app的build.gradle中添加最新版本的exopalyer包:
compile 'com.google.android.exoplayer:exoplayer:r2.X.X'
2. 创建player:
ExoPlayer是通过ExoPlayerFactory创建的,这个工厂类提供了一系列的方法可以创建各种个性化的player。绝大数情况下Renderer可以使用系统默认的,当然如果渲染器满足不了你的需求,你可以自定义。默认情况下可以直接使用ExoPlayerFactory.newSimpleInstance(),返回一个SimpleExoPlayer,SimpleExoPlayer是ExoPlayer的一个升级版,添加了一些强大的功能,可以直接使用。一个简单的SimpleExoPlayer的创建例子:
// 1. Create a default TrackSelector
Handler mainHandler = new Handler();
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector =
new DefaultTrackSelector(videoTrackSelectionFactory);
// 2. Create a default LoadControl
LoadControl loadControl = new DefaultLoadControl();
// 3. Create the player
SimpleExoPlayer player =
ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);
3. 将播放器和视图连接起来
SimpleExoPleyerView可以写在布局文件中,可以直接在代码中使用下面代码即可实现视图的绑定:
//绑定视图
simpleExoPlayerView.setPlayer(player);如果你想要更精确的对播放进行控制的话,可以使用Surface,SurfaceView,TextureViewÿ