implementation 'com.google.android.exoplayer:exoplayer:2.11.6'
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/playerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
class MainActivity : AppCompatActivity() {
private var mPlayer: SimpleExoPlayer? = null
private var playWhenReady = true
private var currentWindow = 0
private var playbackPosition: Long = 0
private val hlsUrl = "https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
private fun initPlayer(){
mPlayer = SimpleExoPlayer.Builder(this).build()
// Bind the player to the view.
playerView.player = mPlayer
mPlayer!!.playWhenReady = true
mPlayer!!.seekTo(playbackPosition)
mPlayer!!.prepare(buildMediaSource(), false, false)
}
override fun onStart() {
super.onStart()
if (Util.SDK_INT >= 24) {
initPlayer()
}
}
override fun onResume() {
super.onResume()
hideSystemUi()
if (Util.SDK_INT < 24 || mPlayer == null) {
initPlayer()
}
}
override fun onPause() {
super.onPause()
if (Util.SDK_INT < 24) {
releasePlayer()
}
}
override fun onStop() {
super.onStop()
if (Util.SDK_INT >= 24) {
releasePlayer()
}
}
@SuppressLint("InlinedApi")
private fun hideSystemUi() {
playerView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
or View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
}
private fun releasePlayer() {
if (mPlayer == null) {
return
}
playWhenReady = mPlayer!!.playWhenReady
playbackPosition = mPlayer!!.currentPosition
currentWindow = mPlayer!!.currentWindowIndex
mPlayer!!.release()
mPlayer = null
}
private fun buildMediaSource(): MediaSource {
val userAgent = Util.getUserAgent(playerView.context, playerView.context.getString(R.string.app_name))
val dataSourceFactory = DefaultHttpDataSourceFactory(userAgent)
val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory).
createMediaSource(Uri.parse(hlsUrl))
return hlsMediaSource
}
}