ExoPlayer 获取持续时间

ExoPlayer getDuration

我正在尝试使用 ExoPlayer 播放来自 url 的 mp3 文件。

一切都很好,但现在我想知道什么时候可以安全地 getDuration() 音轨。加载曲目后我只需要它。在 google 的示例项目中未找到它。

当我尝试在 exoPlayer.prepare() 之后立即获取它时,我得到 UNKNOWN_TIME

好的,看起来这是这里唯一的解决方案。

我们为我们的播放器添加监听器,并在状态更改为 STATE_READY 时获取持续时间。它显然会调用每个 play/pause 动作,所以我们需要用 boolean durationSet 标志包装它 if 检查以在轨道开始时调用它一次。然后 durationSet = falseaudioPlayer.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();
    }
}