1- package com.subpilot.player
1+ package com.geekneuron. subpilot.player
22
3- @Composable fun VideoPlayer (...) { .. . }
3+ import android.net.Uri
4+ import android.widget.FrameLayout
5+ import androidx.compose.runtime.Composable
6+ import androidx.compose.ui.Modifier
7+ import androidx.compose.ui.viewinterop.AndroidView
8+ import androidx.core.net.toUri
9+ import com.google.android.exoplayer2.ExoPlayer
10+ import com.google.android.exoplayer2.MediaItem
11+ import com.google.android.exoplayer2.ui.PlayerView
12+ import androidx.compose.runtime.DisposableEffect
13+ import androidx.compose.ui.platform.LocalContext
14+
15+ @Composable
16+ fun VideoPlayer (modifier : Modifier = Modifier , uri : Uri ? ) {
17+ val context = LocalContext .current
18+
19+ if (uri == null ) return
20+
21+ DisposableEffect (uri) {
22+ val player = ExoPlayer .Builder (context).build().apply {
23+ setMediaItem(MediaItem .fromUri(uri))
24+ prepare()
25+ playWhenReady = true
26+ }
27+
28+ onDispose {
29+ player.release()
30+ }
31+ }
32+
33+ AndroidView (
34+ modifier = modifier,
35+ factory = {
36+ PlayerView (context).apply {
37+ layoutParams = FrameLayout .LayoutParams (
38+ FrameLayout .LayoutParams .MATCH_PARENT ,
39+ FrameLayout .LayoutParams .MATCH_PARENT
40+ )
41+ useController = true
42+ player = ExoPlayer .Builder (context).build().apply {
43+ setMediaItem(MediaItem .fromUri(uri))
44+ prepare()
45+ }
46+ }
47+ }
48+ )
49+ }
0 commit comments