Skip to content

Commit 47da132

Browse files
authored
VideoPlayer.kt
1 parent decfb9b commit 47da132

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed
Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,49 @@
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

Comments
 (0)