首页 > 解决方案 > Android 没有在给定的 startSeconds 播放 YouTube 视频

问题描述

我已将 YouTube 视频嵌入到 Android 中的活动中。我正在使用这个库来做到这一点。视频加载正常,但问题是它有时无法在正确的秒数加载

当我调用loadVideo(videoId, 100f)它时,它应该在第 100 秒(或 1:40)加载视频,有时视频可以正常加载,有时它会在 0:00 加载,这不是我想要的。我希望视频从 1:40 开始。

这导致的另一个问题是,一旦我旋转屏幕,onCreate()就会再次调用,并且我正在currentSeconds从 YouTube 播放器中检索 ,以便视频可以从停止的位置继续播放。我再次遇到同样的问题,有时视频通过恢复到当前秒数表现正确,或者从 0:00 重新开始。

我尝试loadVideo()在 onResume 中调用,但无法正常工作。我怀疑它可能与生命周期有关。也许视频加载太慢或太快,我不知道。

我认为这个函数中发生了一些错误:

youTubePlayerView.addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
            override fun onReady(youTubePlayer: YouTubePlayer) {
                youTubePlayer.loadVideo(videoId, startSeconds)
                youTubePlayerView.enableBackgroundPlayback(true)
                youTubePlayer.addListener(tracker)
            }
        })

这是我的活动

class MainActivity : AppCompatActivity(), LifecycleObserver {

    private lateinit var youTubePlayerView: YouTubePlayerView
    private lateinit var observer: YouTubeObserver
    private lateinit var tracker: YouTubePlayerTracker
    private var startSeconds: Float = 100f
    private val videoId = "gVGRIBWy6ig"

    // Keys
    private val KEY_CURRENT_SECONDS = "KEY_CURRENT_SECONDS"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Timber.i("onCreate called")

        if (savedInstanceState != null) {
            startSeconds = savedInstanceState.getFloat(KEY_CURRENT_SECONDS)
        }

        youTubePlayerView = findViewById(R.id.youTubePlayerView)
        observer = YouTubeObserver(this.lifecycle, youTubePlayerView)
        tracker = YouTubePlayerTracker()

        youTubePlayerView.addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
            override fun onReady(youTubePlayer: YouTubePlayer) {
                youTubePlayer.loadVideo(videoId, startSeconds)
                youTubePlayerView.enableBackgroundPlayback(true)
                youTubePlayer.addListener(tracker)
            }
        })
        Timber.i(tracker.currentSecond.toString())
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putFloat(KEY_CURRENT_SECONDS, tracker.currentSecond)
        Timber.i("onSave called")

    }
}

标签: androidkotlinvideoyoutube

解决方案


推荐阅读