我录制音频并将其发送到服务器。当我从服务器获取文件时,我可以听到我的音频。但该文件的持续时间是-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)
| 归档时间: |
|
| 查看次数: |
2932 次 |
| 最近记录: |