尽管在 ExoPlayer 中添加了 ConcatenatingMediaSouce,但时间轴为空
Empty Timeline despite adding ConcatenatingMediaSouce in ExoPlayer
我正在制作一堆歌曲 ConcatenatingMediaSource
...
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 函数
private fun makeMediaSource(sourceOfSong: String): ProgressiveMediaSource {
val dataSourceFactory = DefaultDataSourceFactory(
this,
getUserAgent(this, "ApplicationName")
)
return ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(
Uri.parse(sourceOfSong)
)
}
我想从播放列表中随机播放一首歌曲,所以当我使用 seekTo(windowIndex, playbackPosition)
时,应用程序崩溃了。然后在将 ConcatenatingMediaSource
添加到播放器后检查时间线的 windowCount
和 periodCount
我得到了 0 和 timeline 也是空的,但我应该让 window 和 period 计数根据官方 sources,ConcatenatingMediaSource 的大小。我不明白为什么会这样?
我终于弄明白了,我正在用 ConcatenatingMediaSource
准备播放器,然后我正在记录 时间轴的 windowCount
和 periodCount
player!!.prepare(concatenatingMediaSource)
Log.d(TAG, "onCreate: period count ==> ${player!!.currentTimeline.periodCount} \n " +
"window count ==> ${player!!.currentTimeline.windowCount}")
我发现 prepare
方法 异步工作 并且需要一些时间让玩家准备好否则他们为什么要提供 听众 为。因此,我在 onPlayerStateChanged
中记录了 windowCount 并且它有效。
我正在制作一堆歌曲 ConcatenatingMediaSource
...
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 函数
private fun makeMediaSource(sourceOfSong: String): ProgressiveMediaSource {
val dataSourceFactory = DefaultDataSourceFactory(
this,
getUserAgent(this, "ApplicationName")
)
return ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(
Uri.parse(sourceOfSong)
)
}
我想从播放列表中随机播放一首歌曲,所以当我使用 seekTo(windowIndex, playbackPosition)
时,应用程序崩溃了。然后在将 ConcatenatingMediaSource
添加到播放器后检查时间线的 windowCount
和 periodCount
我得到了 0 和 timeline 也是空的,但我应该让 window 和 period 计数根据官方 sources,ConcatenatingMediaSource 的大小。我不明白为什么会这样?
我终于弄明白了,我正在用 ConcatenatingMediaSource
准备播放器,然后我正在记录 时间轴的 windowCount
和 periodCount
player!!.prepare(concatenatingMediaSource)
Log.d(TAG, "onCreate: period count ==> ${player!!.currentTimeline.periodCount} \n " +
"window count ==> ${player!!.currentTimeline.windowCount}")
我发现 prepare
方法 异步工作 并且需要一些时间让玩家准备好否则他们为什么要提供 听众 为。因此,我在 onPlayerStateChanged
中记录了 windowCount 并且它有效。