我有一个屏幕,上面有一个播放一次的视频播放器(因此不会循环播放)。当视频播放完毕后,播放器会继续显示最后一帧,这正是我想要的。然而,如果视频播放完毕后我关闭并重新打开屏幕,则播放器会显示黑屏。我想让播放器继续显示最后一帧,请问是否可能实现?如果非循环视频尚未播放完毕,此问题也将持续存在。
需要注意的是,循环视频不存在此问题。
对于常规Android播放器的生命周期,有大量文档可供参考,但没有针对Compose的文档。我只能在网上找到一些关于Compose版本的文章,在该版本中,播放器在
我使用AndroidView实现了ExoPlayer的Jetpack Compose版本(因为目前还没有原生支持),代码如下:
需要注意的是,循环视频不存在此问题。
对于常规Android播放器的生命周期,有大量文档可供参考,但没有针对Compose的文档。我只能在网上找到一些关于Compose版本的文章,在该版本中,播放器在
onDispose
中被释放。我使用AndroidView实现了ExoPlayer的Jetpack Compose版本(因为目前还没有原生支持),代码如下:
@Composable
fun VideoLayout(@RawRes rawResource: Int) {
val context = LocalContext.current
val uri = RawResourceDataSource.buildRawResourceUri(rawResource)
val mediaItem = MediaItem.fromUri(uri)
val exoPlayer = remember(context, mediaItem) {
ExoPlayer.Builder(context).build().apply {
addMediaItem(mediaItem)
prepare()
play()
repeatMode = REPEAT_MODE_OFF
}
}
DisposableEffect(exoPlayer) { onDispose { exoPlayer.release() } }
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = {
StyledPlayerView(it).apply {
player = exoPlayer
resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM
useController = false
}
}
)
}
rememberSaveable
和自定义Saver的Exoplayer Compose实现。这可能会解决问题,但我还没有尝试过。https://github.com/mdpearce/vermilion/blob/f0e229af70ddcd9b10985dfe46c18c35a54708a4/ui/src/main/java/com/neaniesoft/vermilion/ui/videos/exoplayer/ExoPlayer.kt#L58 - undefined