5

我有通过 exoplayer 播放几个音频文件的基本代码

    ExtractorMediaSource audioSource = new ExtractorMediaSource(uri, dataSourceFactory, extractor, null, null);
    ExtractorMediaSource audioSource2 = new ExtractorMediaSource(uri2, dataSourceFactory2, extractor, null, null);

    ConcatenatingMediaSource concatenatedSource =
            new ConcatenatingMediaSource(audioSource, audioSource2);

我正在尝试使用https://github.com/google/ExoPlayer/issues/2122中的代码示例从所有媒体源中获取持续时间

Timeline timeline = mMediaPlayer.getCurrentTimeline();
int currentWindowIndex = mMediaPlayer.getCurrentWindowIndex();
long currentPosition = mMediaPlayer.getCurrentPosition();
long totalTime = 0;
Timeline.Window tmpWindow = new Timeline.Window();
if (timeline != null) {
   for (int i = 0; i < timeline.getWindowCount(); i++) {
       long windowDuration = timeline.getWindow(i,tmpWindow).getDurationMs();
       totalTime += windowDuration;
       if (i < currentWindowIndex) {
           currentPosition += windowDuration;
       }
  }
 }

问题是第二个源的窗口返回负值,并且直到第一次播放。所以我猜我需要在一开始就以某种方式准备它,但我不确定如何。MediaSource 类型的对象有 prepareSource 方法,但我无法正确使用它。

有没有人成功实现了这个功能?

4

0 回答 0