Exoplayer 不播放视频,第二次只播放音频。
@Composable
fun VideoLayout(videoUrl: String?, muted: Boolean = false) {
if (videoUrl == null)
return
val context = LocalContext.current
val videoPlayer = VideoPlayer.getInstance()
val exoPlayer = videoPlayer.getExoplayer(context)
val exoPlayerView = getStyledPlayerView(context, exoPlayer)
videoPlayer.playVideo(videoUrl)
exoPlayerView.useController = false
if (muted)
exoPlayer.volume = 0f
AndroidView(
modifier = Modifier.fillMaxSize().background(Black, shape = RectangleShape),
factory = { exoPlayerView }
)
}
@Composable
private fun getStyledPlayerView(
context: Context,
exoPlayer: ExoPlayer
) = remember {
StyledPlayerView(context).apply {
player = exoPlayer
resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
}
}
fun playVideo(url: String) {
val uri = Uri.parse(url)
val mediaItem = MediaItem.fromUri(uri)
player?.setMediaItem(mediaItem)
player?.prepare()
player?.play()
}
fun release() {
player?.let {
player?.stop()
player?.clearMediaItems()
player?.release()
player = null
}
}
MediaCodecAudioRenderer:音频接收器错误 com.google.android.exoplayer2.audio.AudioSink$UnexpectedDiscontinuityException:意外的音轨时间戳不连续性:预期 1000001184217,得到 1000001391224
如果有人在流媒体 URL(例如 .m3u8
)上收到此错误AudioSink$UnexpectedDiscontinuityException
并不代表exoplayer有问题。是URL配置有问题。例如:如果有一个 sourceM3u8 URL,并且您使用 FFMPEG 使用不同的块大小创建一个新 URL。它将导致 exoplayer 上的音频不连续错误。可以通过修改ffmpeg命令来修复