ExoPlayer getDuration

时间:2016-02-09 17:16:13

标签: android exoplayer

我尝试使用ExoPlayer从网址播放mp3文件。

一切都很好,但现在我想知道音轨的getDuration()安全的时间到了什么时候。一旦加载了轨道,我就需要它。在谷歌的示例项目中找不到它。

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

2 个答案:

答案 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();
    }
}