MediaPlayer
@Composablefun VideoPlayer(modifier: Modifier = Modifier) { var player by remember { mutableStateOf<MediaPlayer?>(null) }
Scaffold() { innerPadding -> Card(modifier = Modifier.padding(innerPadding)) { AndroidView( { SurfaceView(it).apply { holder.addCallback(object : SurfaceHolder.Callback { override fun surfaceChanged( p0: SurfaceHolder, p1: Int, p2: Int, p3: Int ) { } override fun surfaceCreated(p0: SurfaceHolder) { player = MediaPlayer().apply { val path = context.assets.openFd("VIDEO_ASSET") val url = "VIDEO_URL" setDataSource(url) setDisplay(holder) prepareAsync() setOnPreparedListener { it.start() } } }
override fun surfaceDestroyed(p0: SurfaceHolder) { player?.apply { stop() release() } } }) } }, modifier = Modifier .aspectRatio(16f / 9f) ) } }}Other Usage
Section titled “Other Usage”- Speed
player.playbackParams = PlaybackParams().apply { speed = 1.5f pitch = 1f // stays 1f}- Volume
player.setVolume(1.0f, 1.0f) // right, left volume