gpt4 book ai didi

android - ExoPlayer 2 播放列表监听器

转载 作者:IT老高 更新时间:2023-10-28 22:22:43 24 4
gpt4 key购买 nike

我正在使用 ExoPlayer 2.x 的新功能来播放这样的音频文件列表:

List<MediaSource> playlist = new ArrayList<>();

...

ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource(
playlist.toArray(new MediaSource[playlist.size()]));

mExoPlayer.prepare(concatenatedSource);
mExoPlayer.setPlayWhenReady(true);

这工作正常,但为了相应地更新我的 UI,我需要知道当前正在播放的轨道以及该轨道的进度。 ExoPlayer 有听众吗?

谢谢!

最佳答案

所以我处于类似情况,需要知道播放列表中的下一个视频何时开始。我发现 ExoPlayer.EventListener 有一个名为 onPositionDiscontinuity() 的方法,每次视频更改或“搜索”到播放列表中的下一个时都会调用该方法。

我没有广泛使用过这种方法,但就我目前所见,这是你应该关注的方法。触发该方法时没有传递任何参数,因此您必须保留某种计数器或队列来跟踪任何给定时刻正在播放的内容。

希望这会有所帮助!

编辑: Exoplayer.getCurrentWindowIndex() 返回的索引变化是recommended way检测播放列表 MediaSource 中的项目更改。

int lastWindowIndex = 0; // global var in your class encapsulating exoplayer obj (Activity, etc.)

exoPlayer.addListener(new ExoPlayer.EventListener() {
@Override
public void onLoadingChanged(boolean isLoading) {
}

@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
}

@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
}

@Override
public void onPlayerError(ExoPlaybackException error) {
}

@Override
public void onPositionDiscontinuity() {
//THIS METHOD GETS CALLED FOR EVERY NEW SOURCE THAT IS PLAYED
int latestWindowIndex = exoPlayer.getCurrentWindowIndex();
if (latestWindowIndex != lastWindowIndex) {
// item selected in playlist has changed, handle here
lastWindowIndex = latestWindowIndex;
// ...
}
}
});

关于android - ExoPlayer 2 播放列表监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40284772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com