ExoPlayer 获取持续时间
ExoPlayer getDuration
我正在尝试使用 ExoPlayer
播放来自 url 的 mp3 文件。
一切都很好,但现在我想知道什么时候可以安全地 getDuration()
音轨。加载曲目后我只需要它。在 google 的示例项目中未找到它。
当我尝试在 exoPlayer.prepare()
之后立即获取它时,我得到 UNKNOWN_TIME
。
好的,看起来这是这里唯一的解决方案。
我们为我们的播放器添加监听器,并在状态更改为 STATE_READY
时获取持续时间。它显然会调用每个 play/pause 动作,所以我们需要用 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.
}
});
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();
}
}
我正在尝试使用 ExoPlayer
播放来自 url 的 mp3 文件。
一切都很好,但现在我想知道什么时候可以安全地 getDuration()
音轨。加载曲目后我只需要它。在 google 的示例项目中未找到它。
当我尝试在 exoPlayer.prepare()
之后立即获取它时,我得到 UNKNOWN_TIME
。
好的,看起来这是这里唯一的解决方案。
我们为我们的播放器添加监听器,并在状态更改为 STATE_READY
时获取持续时间。它显然会调用每个 play/pause 动作,所以我们需要用 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.
}
});
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();
}
}