android - ExoPlayer shuffle 不会重现所有歌曲

标签 android exoplayer exoplayer2.x

我正在使用 exoplayer 库创建一个音乐播放器。一切正常,除了不符合我预期的洗牌。

我遇到的问题如下:

假设我有 5 首歌曲:

歌曲 1

歌曲 2

歌曲 3

歌曲 4

歌曲 5

我在第一个。然后我单击随机播放按钮并使用 exoPlayer.shuffleModeEnabled = true 启用随机播放.那么现在的顺序如下:

歌曲 4

歌曲 2

歌曲 5

歌曲 1

歌曲 3

就像我在歌曲 1 中一样,之后它会转到歌曲 3,然后它会在不重现歌曲 4、2 和 5 的情况下完成。我指定的行为是以随机顺序重现所有歌曲。有什么办法可以用 exoplayer 实现吗?

最佳答案

您可以实现自己的 ShuffleOrder 来实现这一点。一种方法是扩展 DefaultShuffleOrder类并使用成员字段来存储起始索引(在您的示例中,它应该是歌曲 1)。您应该覆盖以下方法:

getNextIndex(int index)
getPreviousIndex(int index)
getFirstIndex()
getLastIndex()

这个想法是让它成为一个循环列表。在您的示例中,假设随机播放顺序为 4、2、5、1、3 和 1 当前正在播放,您的 getFirstIndex()应该返回 1,并且 getLastIndex()应该返回 5。对于 getNextIndex(int index)getPreviousIndex(int index) ,做它应该做的事情,但是当你到达头部/尾部时,只需循环它。

然后,当您想激活洗牌时,您可以:
concatenatingMediaSource.setShuffleOrder(new MyShuffleOrder());

关于android - ExoPlayer shuffle 不会重现所有歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56937283/

相关文章:

java - 如何在 exo 播放器中显示 youtube 视频?

android - 在Exoplayer中使用Dynamicmediasource添加多个Audio Hlsmedia源,而无需暂停当前正在播放的Player。

java - 如何在 Exo-player v2.x 中添加 Adaptive Track Selector?

android - ExoPlayer 有时会从 url 返回 mp3 文件的负持续时间

java - exoplayer 不玩添加并崩溃了

机器人 : app crash if user inputs two decimal points like "1..5" instead of "1.5"

java - 微调器几乎不可见

Android:oauth.signpost.exception.OAuthCommunicationException:与服务提供商的通信失败:没有对等证书

java - 使用 PrivateKey、PublicKey 和 Certificate 对象设置 SSLContext

android - 从缓存的视频 ExoPlayer 中获取 uri