exoplayer2持续时间是-9223372036854775807,如何解决这个问题?

Cha*_*les 4 android exoplayer

我录制音频并将其发送到服务器。当我从服务器获取文件时,我可以听到我的音频。但该文件的持续时间是-9223372036854775807。我不明白这个奇怪的...短录制的音频很好。但是当我录制接近 1 分钟或更长的音频时,我遇到了这个问题。当前位置已记录,但未记录总持续时间。怎么解决这个问题?

private fun initializePlayer() {
        if (player == null) {
            val trackSelector = DefaultTrackSelector()
            trackSelector.setParameters(
                trackSelector.buildUponParameters().setMaxVideoSizeSd()
            )
            player = ExoPlayerFactory.newSimpleInstance(this,trackSelector)
            binding.musicPlayer.player = player
            binding.musicPlayer.useController=false
            defaultDataSourceFactory = DefaultDataSourceFactory(this, this.getString(R.string.app_name))
            mediaSourceFactory = ProgressiveMediaSource.Factory(defaultDataSourceFactory)
            player!!.playWhenReady = false
            player!!.addListener(object : Player.EventListener {
                override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
                    when (playbackState) {
                        Player.STATE_IDLE -> {

                        }
                        Player.STATE_BUFFERING -> {

                        }
                        Player.STATE_READY -> {
                            showLog("totalDuration : "+player!!.duration)
                        }
                        Player.STATE_ENDED -> {
                            player!!.playWhenReady = false
                            activeHolder?.run {
                                binding.progressBar.progress = 0
                                showAudioStartButton(activeHolder!!)
                                activeHolder = null
                            }
                            handlerChangeProgress.removeCallbacks(updateChangeProgressTask)
                            currentAudioPosition = 0
                            maxAudioPosition = 0
                            player!!.seekTo(0)
                        }
                    }
                }
            })
        }
    }



Run Code Online (Sandbox Code Playgroud)

日志

D/TAG: totalDuration : -9223372036854775807
Run Code Online (Sandbox Code Playgroud)

小智 8

您必须添加侦听器直到准备好,然后才能获取持续时间:

exoPlayer.addListener(new Player.Listener() {
                @Override
                public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
                    if (playbackState == ExoPlayer.STATE_READY) {
                        long realDurationMillis = exoPlayer.getDuration();
                        seekBar.setMax((int)realDurationMillis/1000);
                        dialog.dismiss();
                    }

                    if (playbackState == ExoPlayer.STATE_ENDED){
                        performEndExoPlayer();
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)