Skip to content

ExoPlayer

implementation("androidx.media3:media3-exoplayer:1.5.1")
implementation("androidx.media3:media3-common:1.5.1")
val player = remember { ExoPlayer.Builder(context).build() }

Add media source with URI and prepare for playing

Section titled “Add media source with URI and prepare for playing”
player.setMediaItem(MediaItem.fromUri("<uri>"))
player.prepare()
  • play() - play the media
  • pause() - pause the media
  • stop() - end the media
  • release() - unload player
DisposableEffect(Unit) {
onDispose {
ExoPlayer.release()
}
}

The playlist in ExoPlayer is just a set of MediaItems

MediaItem.Builder()
.setUri(host + music.url)
.setMediaMetadata( // set some metadata
MediaMetadata.Builder()
.setTitle(music.title())
.setDescription(music.cover)
.build()
)
.build()
player.setMediaItems(mediaItems)

Use a player listener to retrieve realtime metadata from player

player.addListener(object : Player.Listener {
override fun onEvents(player: Player, events: Player.Events) {
// something to do
super.onEvents(player, events)
}
})
// use `player.volume` to get/set volume, sooo easy~
fun adjustVolume(target: Float) {
player.volume.coerceIn(0.0f, 1.0f)
player.volume = target
}
player.repeatMode // get
player.repeatMode = Player.REPEAT_MODE_OFF // no repeat
player.repeatMode = Player.REPEAT_MODE_ONE // for current media item
player.repeatMode = Player.REPEAT_MODE_ALL // for the whole playlist