Я хотел бы знать, как иметь возможность воспроизводить более двух песен подряд в ExoPlayer, используя MediaSources, которые есть в ArrayList.
Я могу использовать ConcatenatingMediaSource
, чтобы иметь возможность воспроизводить две песни спина к спине, но я должен загрузить их в этот фонд как отдельные параметры. Я не хочу делать это для целого списка песен. Я попытался найти ответ на этот вопрос и, похоже, у меня возникло какое-то фундаментальное недоразумение, поскольку я не могу повторить усилия других в других вопросах StackOverflow или блогах и т. Д. c. (Многие блоги показывают простой плейлист из двух источников, как в документации ExoPlayer.)
Этот код предназначен для контекста:
private fun prepareExoPlayer(songs: ListSongs) {
val uris = parseUris(songs)
val mediaSource = buildMediaSource(uris)
applyAudioAttributes()
simpleExoPlayer!!.prepare(mediaSource, false, false)
}
В этом коде проблема:
private fun buildMediaSource(uris: ArrayList<Uri>): MediaSource {
val userAgent = Util.getUserAgent(this, "MusicPlayer")
val defaultMediaSource = DefaultDataSourceFactory(this, userAgent)
val progressiveMediaSource = ProgressiveMediaSource.Factory(defaultMediaSource)
val mediaSources = ArrayList<MediaSource>()
for (uri in uris) {
mediaSources.add(progressiveMediaSource.createMediaSource(uri))
}
return if (mediaSources.size == 1) {
mediaSources[0]
} else {
val concatenatingMediaSource = ConcatenatingMediaSource()
concatenatingMediaSource.addMediaSources(mediaSources)
// ConcatenatingMediaSource(mediaSources[0], mediaSources[1])
}
}
В операторе else я получаю ошибку, поскольку тип возвращаемого значения - не MediaSource, а Unit. Тем не менее, закомментированный код в последней строке работает нормально. Как изменить 2-ю и 3-ю последнюю строчку, чтобы можно было воспроизвести мой список песен?