Android 尽管在ExoPlayer中添加了连接MediaSouce,但时间线为空

Android 尽管在ExoPlayer中添加了连接MediaSouce,但时间线为空,android,kotlin,exoplayer,Android,Kotlin,Exoplayer,我有一大堆歌曲,我正在制作一个连接MediaSource ... allSongs.forEach { concatenatingMediaSource.addMediaSource(makeMediaSource(it.source)) } player!!.prepare(concatenatingMediaSource) Log.d(TAG, "onCreate: period count ==> ${player!!.currentTim

我有一大堆歌曲,我正在制作一个
连接MediaSource

...

allSongs.forEach {
            concatenatingMediaSource.addMediaSource(makeMediaSource(it.source))
        }
player!!.prepare(concatenatingMediaSource)

Log.d(TAG, "onCreate: period count ==> ${player!!.currentTimeline.periodCount} \n " +
                "window count ==> ${player!!.currentTimeline.windowCount}")

...
MakeMediaSource函数


我想从播放列表中随机播放一首歌曲,所以当我使用
seekTo(windowIndex,playbackPosition)
时,应用程序崩溃了。然后,在将
concatingmediasource
添加到播放器后,检查时间线的
windowCount
periodCount
后,我得到了两个时间线的0,并且时间线也是空的,但根据官方的说法,我的窗口和周期计数应该与concatingmediasource的大小一样多。我不明白为什么会发生这种情况?

我终于弄明白了,我正在用
连接MediaSource
为播放器做准备,就在那之后,我记录了时间线的
窗口计数
周期计数


我发现
prepare
方法是异步工作的,需要一些时间才能让播放器准备好,否则为什么他们会为它提供监听器呢。因此,我在
onPlayerStateChanged
中做了一个windowCount日志,它运行正常

是否正在向exoplayer添加/附加mediasource?是的,正在播放播放列表。请在使用seekTo(windowIndex,playbackPosition)的位置添加更多代码,并添加崩溃日志崩溃日志将表明windowIndex无效,因为在我向播放机添加连接mediasource后时间线仍然为空。请参阅最新编辑。
private fun makeMediaSource(sourceOfSong: String): ProgressiveMediaSource {

        val dataSourceFactory = DefaultDataSourceFactory(
            this,
            getUserAgent(this, "ApplicationName")
        )

        return ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(
                Uri.parse(sourceOfSong)
            )
    }
player!!.prepare(concatenatingMediaSource)
Log.d(TAG, "onCreate: period count ==> ${player!!.currentTimeline.periodCount} \n " +
                "window count ==> ${player!!.currentTimeline.windowCount}")