Форум для тех, кто программирует под Android
Anonymous
ExoPlayer не воспроизводит видео HLS
Сообщение
Anonymous » 28 май 2024, 20:11
Я хочу сделать образец тестового видеоплеера, здесь я буду тестировать ссылки hls. Но после нажатия кнопки «Воспроизвести сейчас» появляется вид проигрывателя, но видео не воспроизводится. Я хочу воспроизвести URL-адрес ссылки, вставленный в текстовое поле после нажатия кнопки «Воспроизвести сейчас». Плеер появляется с некоторыми кнопками, но не воспроизводит поток.
Код –
Код: Выделить всё
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HomeView()
}
}
}
@Preview(showBackground = true)
@Composable
fun HomeView() {
var text by rememberSaveable { mutableStateOf("") }
var url by rememberSaveable { mutableStateOf("") }
PlayerXTheme {
Surface(modifier = Modifier.fillMaxSize()) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
contentAlignment = Alignment.Center
) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
SimpleOutlinedTextFieldSample(text) { text = it }
Button(
onClick = { url = text },
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp)
) {
Text("Play Now")
}
if (url.isNotEmpty()) {
ExoPlayerView(url = url)
}
}
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SimpleOutlinedTextFieldSample(text: String, onTextChange: (String) -> Unit) {
OutlinedTextField(
value = text,
onValueChange = onTextChange,
label = { Text("HLS/M3U8 URL") },
modifier = Modifier
.fillMaxWidth()
.height(60.dp)
)
}
@Composable
fun ExoPlayerView(url: String) {
val context = LocalContext.current
val exoPlayer = remember {
ExoPlayer.Builder(context).build().apply {
val mediaItem = MediaItem.fromUri(url)
setMediaItem(mediaItem)
prepare()
playWhenReady = true
}
}
DisposableEffect(Unit) {
exoPlayer.addListener(object : Player.Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
super.onIsPlayingChanged(isPlaying)
Log.d("ExoPlayerView", "IsPlaying: $isPlaying")
}
override fun onPlaybackStateChanged(state: Int) {
super.onPlaybackStateChanged(state)
Log.d("ExoPlayerView", "PlaybackState: $state")
}
})
onDispose {
exoPlayer.release()
}
}
AndroidView(
factory = {
PlayerView(context).apply {
player = exoPlayer
}
},
modifier = Modifier
.fillMaxWidth()
.height(200.dp)
)
}
Я хочу играть в HLS с помощью Jetpack Compose.
Подробнее здесь:
https://stackoverflow.com/questions/785 ... -hls-video
1716916287
Anonymous
Я хочу сделать образец тестового видеоплеера, здесь я буду тестировать ссылки hls. Но после нажатия кнопки «Воспроизвести сейчас» появляется вид проигрывателя, но видео не воспроизводится. Я хочу воспроизвести URL-адрес ссылки, вставленный в текстовое поле после нажатия кнопки «Воспроизвести сейчас». Плеер появляется с некоторыми кнопками, но не воспроизводит поток. Код – [code] class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HomeView() } } } @Preview(showBackground = true) @Composable fun HomeView() { var text by rememberSaveable { mutableStateOf("") } var url by rememberSaveable { mutableStateOf("") } PlayerXTheme { Surface(modifier = Modifier.fillMaxSize()) { Box( modifier = Modifier .fillMaxSize() .padding(20.dp), contentAlignment = Alignment.Center ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { SimpleOutlinedTextFieldSample(text) { text = it } Button( onClick = { url = text }, modifier = Modifier .fillMaxWidth() .padding(top = 16.dp) ) { Text("Play Now") } if (url.isNotEmpty()) { ExoPlayerView(url = url) } } } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun SimpleOutlinedTextFieldSample(text: String, onTextChange: (String) -> Unit) { OutlinedTextField( value = text, onValueChange = onTextChange, label = { Text("HLS/M3U8 URL") }, modifier = Modifier .fillMaxWidth() .height(60.dp) ) } @Composable fun ExoPlayerView(url: String) { val context = LocalContext.current val exoPlayer = remember { ExoPlayer.Builder(context).build().apply { val mediaItem = MediaItem.fromUri(url) setMediaItem(mediaItem) prepare() playWhenReady = true } } DisposableEffect(Unit) { exoPlayer.addListener(object : Player.Listener { override fun onIsPlayingChanged(isPlaying: Boolean) { super.onIsPlayingChanged(isPlaying) Log.d("ExoPlayerView", "IsPlaying: $isPlaying") } override fun onPlaybackStateChanged(state: Int) { super.onPlaybackStateChanged(state) Log.d("ExoPlayerView", "PlaybackState: $state") } }) onDispose { exoPlayer.release() } } AndroidView( factory = { PlayerView(context).apply { player = exoPlayer } }, modifier = Modifier .fillMaxWidth() .height(200.dp) ) } [/code] Я хочу играть в HLS с помощью Jetpack Compose. Подробнее здесь: [url]https://stackoverflow.com/questions/78545559/exoplayer-not-playing-hls-video[/url]