ExoPlayer 在 Android API 30+ 上重组时晃动严重

问题描述 投票:0回答:1

我已经在不同的 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+ 时晃动]

android android-jetpack-compose exoplayer android-video-player
1个回答
0
投票

自我回答

设置TextureView解决了这个问题

© www.soinside.com 2019 - 2024. All rights reserved.