ExoPlayer shuffle воспроизводит не все песни

Я создаю музыкальный проигрыватель, используя библиотеку exoplayer. Все работает нормально, за исключением случайного воспроизведения, которое ведет себя не так, как я ожидал.

Проблема, которая у меня есть, следующая:

Представьте, что у меня есть 5 песен:

песня 1

песня 2

песня 3

песня 4

песня 5

и я в первом. Затем я нажимаю кнопку перемешивания и включаю перемешивание с помощью exoPlayer.shuffleModeEnabled = true. Тогда теперь порядок следующий:

песня 4

песня 2

песня 5

песня 1

песня 3

Как и в случае с песней 1, после этого он перейдет к песне 3, а затем он закончится без воспроизведения песни 4, 2 и 5. Поведение, которое я указываю, заключается в воспроизведении всех песен в случайном порядке. Есть ли способ добиться этого с помощью exoplayer?


person Iban Arriola    schedule 08.07.2019    source источник
comment
вы нашли какое-то решение или другой способ?   -  person Richa Shah    schedule 11.02.2020


Ответы (1)


Для этого вы можете реализовать свой собственный 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());
person Jeffrey    schedule 26.03.2020