package core.presentation.components import androidx.annotation.OptIn import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer import androidx.media3.ui.PlayerView import androidx.media3.ui.AspectRatioFrameLayout @OptIn(UnstableApi::class) @Composable fun AppVideoPlayer( url: String, modifier: Modifier = Modifier, useController: Boolean = true, autoPlay: Boolean = true, onVideoFinished: () -> Unit = {} ) { val context = LocalContext.current val exoPlayer = remember { ExoPlayer.Builder(context).build().apply { val mediaItem = MediaItem.fromUri(url) setMediaItem(mediaItem) prepare() playWhenReady = autoPlay addListener(object : Player.Listener { override fun onPlaybackStateChanged(state: Int) { if (state == Player.STATE_ENDED) { onVideoFinished() } } }) } } // Очистка ресурсов при выходе DisposableEffect(Unit) { onDispose { exoPlayer.release() } } AndroidView( factory = { PlayerView(it).apply { player = exoPlayer this.useController = useController // Для сторис используем заполнение экрана resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM } }, modifier = modifier ) }