Skip to content

Instantly share code, notes, and snippets.

@rubenquadros
Created September 4, 2021 16:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rubenquadros/ef25b1b579480d282dc3a9534c319863 to your computer and use it in GitHub Desktop.
Save rubenquadros/ef25b1b579480d282dc3a9534c319863 to your computer and use it in GitHub Desktop.
Video player to play videos
@ExperimentalAnimationApi
@Composable
fun VideoPlayer(
modifier: Modifier = Modifier,
gameVideos: List<VideoResultEntity>,
currentPlaying: State<Int>,
onVideoChange: (Int) -> Unit
) {
val videoTitle = remember {
mutableStateOf(
gameVideos[currentPlaying.value].name
)
}
val exoPlayer = remember {
SimpleExoPlayer.Builder(context).build().apply {
this.setMediaItems(mediaItems)
this.prepare()
addListener(
object : Player.Listener {
override fun onEvents(
player: Player,
events: Player.Events
) {
super.onEvents(player, events)
// hide title only when player duration is at least 200ms
if (player.currentPosition >= 200)
visibleState.value = false
}
override fun onMediaItemTransition(
mediaItem: MediaItem?,
reason: Int
) {
super.onMediaItemTransition(
mediaItem,
reason
)
// everytime media item changes notify playlist about current playing
onVideoChange(
this@apply.currentPeriodIndex
)
// everytime the media item changes show the title
visibleState.value = true
videoTitle.value =
mediaItem?.mediaMetadata
?.displayTitle.toString()
}
}
)
}
}
// everytime an item in playlist is clicked play that video
exoPlayer.seekTo(currentPlaying.value, C.TIME_UNSET)
exoPlayer.playWhenReady = true
// rest of things remain same
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment