我尝试使用ExoPlayer
从网址播放mp3文件。
一切都很好,但现在我想知道音轨的getDuration()
安全的时间到了什么时候。一旦加载了轨道,我就需要它。在谷歌的示例项目中找不到它。
当我尝试在exoPlayer.prepare()
之后立即获取它时,我得到UNKNOWN_TIME
。
答案 0 :(得分:13)
好的,看起来这是唯一的解决方案。
我们向玩家添加监听器,并在状态更改为STATE_READY
时获得持续时间。它显然会调用每个播放/暂停操作,因此我们需要使用boolean durationSet
标记if
检查它以在轨道开始时调用它一次。然后durationSet = false
靠近audioPlayer.prepare()
audioPlayer.addListener(new ExoPlayer.Listener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == ExoPlayer.STATE_READY && !durationSet) {
long realDurationMillis = audioPlayer.getDuration();
durationSet = true;
}
}
@Override
public void onPlayWhenReadyCommitted() {
// No op.
}
@Override
public void onPlayerError(ExoPlaybackException error) {
// No op.
}
});
答案 1 :(得分:1)
private int getVideoDurationSeconds(SimpleExoPlayer player)
{
int timeMs=(int) player.getDuration();
int totalSeconds = timeMs / 1000;
return totalSeconds;
}
只需使用exoplayer对象调用此方法,您就会发现总秒数
完整方法
private String stringForTime(int timeMs) {
StringBuilder mFormatBuilder = new StringBuilder();
Formatter mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());
int totalSeconds = timeMs / 1000;
// videoDurationInSeconds = totalSeconds % 60;
int seconds = totalSeconds % 60;
int minutes = (totalSeconds / 60) % 60;
int hours = totalSeconds / 3600;
mFormatBuilder.setLength(0);
if (hours > 0) {
return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString();
} else {
return mFormatter.format("%02d:%02d", minutes, seconds).toString();
}
}