ExoPlayer сильно трясется во время рекомпозиции на Android API 30+

Я тестировал на разных уровнях API. Это происходит с API 30+, но с более низким API все работает нормально. Проблема существует на эмуляторах и физических устройствах.

Вот краткий код того, как я объявляю Player и работаю с ним:

[versions]
exoplayer = "1.3.1"

[libraries]
androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "exoplayer" }
androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "exoplayer" }

Модель представления

@HiltViewModel
class NotesViewModel @Inject constructor(
    @ApplicationContext val context: Context,
) : ViewModel() {
    val player: Player = buildPlayer(context).apply {
        repeatMode = Player.REPEAT_MODE_ONE
        prepare()
    }

}

пользовательский интерфейс

 val viewModel: NotesViewModel = hiltViewModel()
 val player = remember { viewModel.player }
 VideoPlayer(
    player = player,
    isPlaying = uiState.isVideoPlaying,
    onPlayClicked = viewModel::playVideo,
 )

@OptIn(UnstableApi::class)
@Composable
fun VideoPlayer(
    player: Player,
    isPlaying: Boolean,
    onPlayClicked: () -> Unit,
    modifier: Modifier = Modifier,
) {
    val videoHeight = screenHeight() * VIDEO_HEIGHT_RATIO

    Box(modifier) {
        AndroidView(
            factory = { ctx ->
                PlayerView(ctx).apply {
                    this.player = player
                    useController = false
                    resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIXED_HEIGHT
                }
            },
            modifier = Modifier
                .fillMaxWidth()
                .height(videoHeight.dp)
        )
        PlayButton(
            visible = !isPlaying,
            onClick = onPlayClicked,
            modifier = Modifier.align(Alignment.Center)
        )
    }
}

[Прекрасное поведение при API ниже 30 ][ Тряска при API 30+]

2
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самостоятельный ответ

Установка TextureView устраняет проблему.

Другие вопросы по теме