准备 exoplayer 时有点迟钝
Small laggy when prepare exoplayer
在我的应用程序中,我有一个无限动画。其实就是一个TextSwitcher
动画运行从左到右。但是,每当我尝试准备播放器时,我都会遇到文本动画的抖动问题。虽然只有几毫秒,但它导致我的文本就像从左跳到右。这是准备视频的方法:
private fun prepareVideo(uri: Uri): SimpleExoPlayer? {
val simpleExoPlayer = SimpleExoPlayer
.Builder(this) // .setLoadControl(defaultLoadControl)
.build()
val mediaItem = MediaItem.fromUri(uri)
simpleExoPlayer.setMediaItem(mediaItem)
val eventListener: Player.EventListener = object : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) {
if (state == ExoPlayer.STATE_READY) {
playVideo(simpleExoPlayer)
}
}
}
simpleExoPlayer.addListener(eventListener)
simpleExoPlayer.playWhenReady = false
simpleExoPlayer.prepare()
showToast("Prepare video")
return simpleExoPlayer
}
你们有解决办法吗?
如果您认为这部分代码有问题,我建议您尝试在应用程序 class 中初始化您的 SimpleExoPlayer
对象,并在整个应用程序中使用它的实例。
尝试使用此代码
var exoPlayer: SimpleExoPlayer? = null
private fun setupVideo(uriString: String) {
val appName = R.string.app_name
val trackSelector: TrackSelector = DefaultTrackSelector()
val userAgent = context.let { Util.getUserAgent(it, it.getString(appName)) }
val sourceFactory = DefaultDataSourceFactory(requireContext(), userAgent)
val uri = Uri.parse(uriString)
val mediaSource = ProgressiveMediaSource.Factory(sourceFactory).createMediaSource(uri)
exoPlayer = ExoPlayerFactory.newSimpleInstance(context, trackSelector)
exoPlayer?.prepare(mediaSource)
exoPlayer?.playWhenReady = false
pvPlayer.player = exoPlayer
}
经过一段时间的调查,我发现问题是创建了一个 ExoPlayer
实例。
val simpleExoPlayer = SimpleExoPlayer
.Builder(this) // .setLoadControl(defaultLoadControl)
.build()
仅仅这个简单的动作就花了大约 0.1
秒完成。结果,它在短时间内冻结了动画。我决定在启动画面上创建它并尽可能重复使用它。
在我的应用程序中,我有一个无限动画。其实就是一个TextSwitcher
动画运行从左到右。但是,每当我尝试准备播放器时,我都会遇到文本动画的抖动问题。虽然只有几毫秒,但它导致我的文本就像从左跳到右。这是准备视频的方法:
private fun prepareVideo(uri: Uri): SimpleExoPlayer? {
val simpleExoPlayer = SimpleExoPlayer
.Builder(this) // .setLoadControl(defaultLoadControl)
.build()
val mediaItem = MediaItem.fromUri(uri)
simpleExoPlayer.setMediaItem(mediaItem)
val eventListener: Player.EventListener = object : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) {
if (state == ExoPlayer.STATE_READY) {
playVideo(simpleExoPlayer)
}
}
}
simpleExoPlayer.addListener(eventListener)
simpleExoPlayer.playWhenReady = false
simpleExoPlayer.prepare()
showToast("Prepare video")
return simpleExoPlayer
}
你们有解决办法吗?
如果您认为这部分代码有问题,我建议您尝试在应用程序 class 中初始化您的 SimpleExoPlayer
对象,并在整个应用程序中使用它的实例。
尝试使用此代码
var exoPlayer: SimpleExoPlayer? = null
private fun setupVideo(uriString: String) {
val appName = R.string.app_name
val trackSelector: TrackSelector = DefaultTrackSelector()
val userAgent = context.let { Util.getUserAgent(it, it.getString(appName)) }
val sourceFactory = DefaultDataSourceFactory(requireContext(), userAgent)
val uri = Uri.parse(uriString)
val mediaSource = ProgressiveMediaSource.Factory(sourceFactory).createMediaSource(uri)
exoPlayer = ExoPlayerFactory.newSimpleInstance(context, trackSelector)
exoPlayer?.prepare(mediaSource)
exoPlayer?.playWhenReady = false
pvPlayer.player = exoPlayer
}
经过一段时间的调查,我发现问题是创建了一个 ExoPlayer
实例。
val simpleExoPlayer = SimpleExoPlayer
.Builder(this) // .setLoadControl(defaultLoadControl)
.build()
仅仅这个简单的动作就花了大约 0.1
秒完成。结果,它在短时间内冻结了动画。我决定在启动画面上创建它并尽可能重复使用它。