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

时间:2018-09-07 12:47:01

标签: android audio exoplayer

我想使用Exoplayer制作动态音频播放列表。我使用了DynamicMediaSource和ConcateMediaSource,它可以正常工作,但是如果我的播放器当前正在播放,并且我将尝试添加mediasource,则当前播放器可以进入暂停状态并重新添加mediasource将开始播放。最初,我将仅创建一个音频的媒体源,并使player.playWhenReady第一次为true。然后在列表中添加另一个源,并为我的播放列表创建音频源。 那么可以在没有暂停播放器的情况下添加mediasouce吗?播放列表可以以其他方式播放吗? 下面的代码用于创建第一个音频的媒体来源:-

fun createAudioSource(data: MusicDetailResponse.AudioX, audioAllItem: MusicDetailResponse.Audio, position: Int) {

    player = ExoPlayerFactory.newSimpleInstance(context, DefaultTrackSelector())
    val userAgent = Util.getUserAgent(context, context.getString(R.string.label_user_agent))
    val dataSourceFactory = DefaultHttpDataSourceFactory(
            userAgent, null,
            DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
            1800000,
            true)

    val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(data.audio))
    player!!.prepare(hlsMediaSource)
    player!!.playWhenReady = true

}
fun addAudioList(item: MusicDetailResponse.AudioX) {
   tempAudioList.add(item)
   createHlsMediaSource(tempAudioList)
}

private fun createHlsMediaSource(tempAudioList: ArrayList<MusicDetailResponse.AudioX>) {
   for (i in 1 until tempAudioList.size) {
        val userAgent = Util.getUserAgent(context, context.getString(R.string.label_user_agent))
        val dataSourceFactory = DefaultHttpDataSourceFactory(
                userAgent, null,
                DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
                1800000,
                true)
        val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(tempAudioList[i].audio))
        cMediaSource!!.addMediaSource(hlsMediaSource)
    }

    player?.prepare(cMediaSource, false, false)

}

1 个答案:

答案 0 :(得分:0)

将所有出现的DynamicConcatenatingMediaSource重命名为ConcatenatingMediaSource。

您是否曾经想在您的Android应用程序中支持媒体播放列表,因此用户可以在播放过程中任意添加和删除播放列表项?现在可以了!

从ExoPlayer 2.8.0开始,我们已使用动态播放列表功能更新了ConcatenatingMediaSource。从表面上看,新媒体源具有非常简单明了的界面:

addMediaSource(mediaSource)在播放列表的末尾附加一个新的媒体源。 addMediaSource(index,mediaSource)在播放列表中的指定索引处插入新的媒体源。 addMediaSources(Collection)批量在播放列表的末尾追加一整套新的媒体源。 addMediaSources(index,Collection)批量在播放列表中的指定索引处插入一组新的媒体源。 removeMediaSource(index)删除给定索引处的媒体源。 moveMediaSource(fromIndex,toIndex)在播放列表中移动现有的媒体源。这很有用,因为您不必创建新的MediaSource对象。您还可以在当前正在播放的项目中移动,而不会中断播放。 getMediaSource(index)允许您访问给定索引处的媒体源。 getSize()返回当前播放列表的长度。