【问题标题】:Exoplayer; merge ConcatenatingMediaSource with audiotrack?外层播放器;将 ConcatenatingMediaSource 与音轨合并?
【发布时间】:2017-10-31 13:24:38
【问题描述】:

我有一个 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. 如何在ConcatenatingMediaSource 下播放单独的音轨?

【问题讨论】:

  • 您是否尝试将 AudioSource 包装在 LoopingMediaSource 中?
  • @damian 是的,就在现在。仍然抛出完全相同的异常。

标签: android exoplayer exoplayer2.x


【解决方案1】:

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

【讨论】:

  • 我了解,但能否使用此解决方案在很大程度上取决于我播放背景 MP3 的方式。此外,音频仍在以这种方式下载,如果可能的话,我想避免这种情况。
猜你喜欢
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多