tim*_*ser 23 android exoplayer
我正在使用ExoPlayer 2.x的新功能来播放这样的音频文件列表:
List<MediaSource> playlist = new ArrayList<>();
...
ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource(
playlist.toArray(new MediaSource[playlist.size()]));
mExoPlayer.prepare(concatenatedSource);
mExoPlayer.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但为了相应地更新我的UI,我需要知道当前正在播放哪首曲目以及该曲目的进度.ExoPlayer有没有听众?
谢谢!
rai*_*zed 11
所以我处于类似的情况,需要知道播放列表中的下一个视频何时开始.我发现每次视频改变或"寻找"到播放列表中的下一个时,都会调用一个被调用ExoPlayer.EventListener的方法onPositionDiscontinuity().
我没有广泛使用过这种方法,但从目前为止我看到的,这是你应该关注的方法.触发该方法时没有传递任何参数,因此您必须保留某种计数器或队列以跟踪在任何给定时刻播放的内容.
希望这有帮助!
编辑:返回的索引更改Exoplayer.getCurrentWindowIndex()是检测播放列表中项目更改的推荐方法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;
// ...
}
}
});
Run Code Online (Sandbox Code Playgroud)
您可以根据玩家的状态实施以下事件并更新您的UI.
mExoPlayer.addListener(new ExoPlayer.Listener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == PlaybackStateCompat.STATE_PLAYING) {
//do something
}
}
@Override
public void onPlayWhenReadyCommitted() {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
mExoPlayer.stop();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8272 次 |
| 最近记录: |