导入ExoPlayer的相关依赖
全包导入
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'
按需导入
implementation 'com.google.android.exoplayer:exoplayer-core:2.17.0'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.17.0'
implementation 'com.google.android.exoplayer:exoplayer-hls:2.17.0'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.17.0'
exoplayer-core:核心库
exoplayer-ui:UI界面库
exoplayer-hls:HLS支持库
exoplayer-dash:dash支持库
添加JAVA8支持
//kotlin
kotlinOptions {
jvmTarget = '1.8'
}
//java
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
创建播放器
exoplayer提供了ExoPlayer和SimpleExoPlayer两种播放器实例,其中SimpleExoPlayer在最新的版本中已经弃用,官方推荐使用ExoPlayer实例
val mPlayer = ExoPlayer.Builder(this).build()
将播放器与播放界面关联
exoPlayer提供了多种播放界面可供选择,包括PlayerView和StyledPlayerView,PlayerView提供了基本的播放控制,StyledPlayerView在基本播放控制的基础上增加了快进、倍速播放等几个常用的操作。我们来看一下这两种播放视图的界面效果。
PlayerView
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/exo_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
StyledPlayerView
<com.google.android.exoplayer2.ui.StyledPlayerView
android:id="@+id/exo_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
关联视图和播放器实例
mBinding.exoPlayer.player=mPlayer
创建媒体资源
任何播放器都是一样的,想要播放音频或者视频必须要创建对应的媒体资源,exoplayer创建媒体资源也是非常简单的,只需要使用url便可创建一个MediaItem。
val url="https://xxx/xxx.mp4"
val mediaItem = MediaItem.fromUri(Uri.parse(url))
mPlayer.setMediaItem(mediaItem)//准备媒体资源
mPlayer.prepare()
mPlayer.play()//开始播放
控制播放器
由于PlayerView或者SytledPlayerView都内置控制器,不用编写任何代码便可实现对播放器的基本控制,比如开始、暂停、上一个下一个等,但是考虑到后续的定制化操作,Exoplayer也提供了控制播放器的操作方法,达到通过代码来控制播放器的目的。一些常用的方法如下:
- player和pause控制开始和暂停播放
- seekTo控制进度条位置
- setRepetModel 控制是否循环播放
- setShuffleModeEnabled 控制随机播放
- setPlaybackParameters 调整播放速度和音调
释放播放器资源
当不需要播放时要考虑在合适的时机和位置释放播放器资源,调用release方法可以释放资源
override fun onDestroy() {
super.onDestroy()
mPlayer.stop()
mPlayer.release()
}
结束语
这篇文章作为音视频系列的开篇,简单介绍了ExoPlayer的基本使用,下一篇会介绍ExoPlayer的相关事件监听