1

我有一个 HLS url 列表,我需要使用 exoplayer 2 连续播放。这不是问题:

val mediaSources = arrayOfNulls<MediaSource>(videoModel.Clips.size)
for (i in videoModel.Clips.indices) {
    mediaSources[i] = buildVideoSource(videoModel.Clips.get(i).StreamUrl)
}
val videoSource = if (mediaSources.size == 1) mediaSources[0] else ConcatenatingMediaSource(*mediaSources)

这里的问题是我需要将这些视频静音,并播放 mp3 音轨作为背景音乐。我该怎么办?我以为我可以像这样使用 MergingMediaSource :

val audioSource = buildAudioSource()
val mergedSource = MergingMediaSource(videoSource, audioSource)
player!!.prepare(videoSource)

但这会引发以下错误:合并失败,因为源具有不同的周期计数。

Source error:
com.google.android.exoplayer2.source.MergingMediaSource$IllegalMergeException
   at com.google.android.exoplayer2.source.MergingMediaSource.checkTimelineMerges(MergingMediaSource.java:169)
   at com.google.android.exoplayer2.source.MergingMediaSource.handleSourceInfoRefreshed(MergingMediaSource.java:144)
   at com.google.android.exoplayer2.source.MergingMediaSource.access$000(MergingMediaSource.java:34)
   at com.google.android.exoplayer2.source.MergingMediaSource$1.onSourceInfoRefreshed(MergingMediaSource.java:102)
   at com.google.android.exoplayer2.source.ConcatenatingMediaSource.handleSourceInfoRefreshed(ConcatenatingMediaSource.java:142)
   at com.google.android.exoplayer2.source.ConcatenatingMediaSource.access$000(ConcatenatingMediaSource.java:34)
   at com.google.android.exoplayer2.source.ConcatenatingMediaSource$1.onSourceInfoRefreshed(ConcatenatingMediaSource.java:81)
   at com.google.android.exoplayer2.source.hls.HlsMediaSource.onPrimaryPlaylistRefreshed(HlsMediaSource.java:142)
   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker.onPlaylistUpdated(HlsPlaylistTracker.java:385)
   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker.access$1200(HlsPlaylistTracker.java:41)
   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker$MediaPlaylistBundle.processLoadedPlaylist(HlsPlaylistTracker.java:590)
   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker$MediaPlaylistBundle.onLoadCompleted(HlsPlaylistTracker.java:539)
   at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker$MediaPlaylistBundle.onLoadCompleted(HlsPlaylistTracker.java:472)
   at com.google.android.exoplayer2.upstream.Loader$LoadTask.handleMessage(Loader.java:383)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.os.HandlerThread.run(HandlerThread.java:61)

我有两个问题:

  1. 如何静音传入的 HLS 流?我最好根本不加载音频以节省数据使用量。
  2. 如何在 a 下播放单独的音轨ConcatenatingMediaSource
4

1 回答 1

0

您可以禁用音频,在 exo player Demo 应用程序中,您可以选择音频按钮并选择禁用。您可以查看演示代码以了解如何禁用音频

于 2017-10-31T13:57:15.173 回答