准备 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 秒完成。结果,它在短时间内冻结了动画。我决定在启动画面上创建它并尽可能重复使用它。