如何使用 ExoPlayer 获取当前正在播放的曲目的索引

Jom*_*ome 2 android exoplayer

我正在开发一个 Android 项目,其中涉及使用 Google 的 ExoPlayer。我有一个视频源列表,我使用以下代码构建播放列表:

for (int i = 0; i < vidList.length(); i++) {
    MediaSource source = new ExtractorMediaSource(Uri.parse(vidList.getJSONObject(i).getString("url")),
                                buildDataSourceFactory(bandwidthMeter), extractorsFactory, mainHandler, HomeFragment.this);
                        mediaSources.add(source);
                        captions.add(vidList.getJSONObject(i).getString("caption"));
                    }

    mediaSource = new ConcatenatingMediaSource(mediaSources.toArray(new MediaSource[mediaSources.size()]));
Run Code Online (Sandbox Code Playgroud)

然后我打电话

exoplayer.prepare(mediasource, false, false)
Run Code Online (Sandbox Code Playgroud)

并且视频连续播放得很好。我想在 textView 中显示当前播放视频的标题,因此我有一个单独的列表来保存每个视频的“标题”值。

通过搜索代码,我发现我可以像这样获取播放列表中当前正在播放的视频;

exoPlayer.getCurrentPeriodIndex()
Run Code Online (Sandbox Code Playgroud)

除了一个问题之外,这似乎有效并返回索引。播放开始时它会两次返回 0 值。也就是说,索引 0 处的视频返回周期 0 以及索引 1 处的视频。这只发生在索引 0 和 1 处,此后其他一切看起来都很好,除了 getCurrentPeriodIndex() 将返回 theAccurateIndex - 1。

我在演示 Exoplayer 应用程序中也看到了这种情况。有没有更好的方法来确定播放列表中当前正在播放的曲目?

谢谢。

woo*_*etm 8

要查找当前播放的曲目,您需要引用currentWindowIndexexoPlayer 字段。在Java中看起来像这样......

exoPlayer.getCurrentWindowIndex()
Run Code Online (Sandbox Code Playgroud)

我不确定是什么getCurrentPeriodIndex()文档没有详细说明,我不喜欢推测。