【发布时间】:2021-01-06 03:41:57
【问题描述】:
我的 mysql 服务器上有音频文件。播放音频时,搜索栏与当前位置不匹配,并在后台以毫秒的差异重复音频。当我删除 seekbar.setMax(mPlayer.getDuration) 它工作正常。并且在 Android:7 中音频无法正常播放。请帮助我尽快解决这个问题。提前谢谢你。
initilizeUI();
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if (b && mPlayer.isPlaying()) {
mPlayer.seekTo((mediaFileLengthInMilliseconds / 100) * i);
Log.d("time", String.valueOf((mediaFileLengthInMilliseconds / 100) * seekBar.getProgress()));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
return root;
}
@SuppressLint("ClickableViewAccessibility")
private void initilizeUI() {
btn.setOnClickListener((View.OnClickListener) this);
seekBar.setMax(99);
mPlayer = new MediaPlayer();
mPlayer.setOnBufferingUpdateListener(this);
mPlayer.setOnCompletionListener(this);
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
seekBar.setSecondaryProgress(percent);
}
@Override
public void onCompletion(MediaPlayer mp) {
if (getActivity() != null) {
int id = getResources().getIdentifier(String.valueOf(R.drawable.restartbtn), "drawable", getActivity().getPackageName());
btn.setImageResource(id);
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.imageButton) {
try {
mPlayer.setDataSource(audio_url);
mPlayer.prepare(); // you must call this method after setup
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(audio_url);
mediaFileLengthInMilliseconds = Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
} catch (Exception e) {
e.printStackTrace();
}
if (!mPlayer.isPlaying()) {
mPlayer.start();
btn.setImageResource(R.drawable.pausebtn);
} else {
mPlayer.pause();
btn.setImageResource(R.drawable.playbtn);
}
seekUpdation();
}
}
Runnable run = new Runnable() {
@Override
public void run() {
seekUpdation();
}
};
public void seekUpdation() {
if (mPlayer.isPlaying()) {
seekBar.setProgress((int) (((float) mPlayer
.getCurrentPosition() / mediaFileLengthInMilliseconds) * 100));
seekHandler.postDelayed(run, 1000);
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (mPlayer.isPlaying()) {
mPlayer.stop();
}
}
【问题讨论】:
-
问题可能出在音频文件本身(而不是代码)。下载
MediaInfo并用它检查您的文件。或者使用恒定比特率 (CBR) 而非可变比特率 (VBR) 的 44100hz 立体声 MP3 进行测试。您还可以分享一个指向这些神秘“我的 mysql 服务器上的音频文件”之一的链接。 供我们自己检查。 -
请查看上面的链接以及如何下载“MediaInfo”?
-
我已经检查了您的文件,它是 VBR,这可能会导致查找问题。看看我的回答对你有没有帮助。 PS:这是您的操作系统的download MediaInfo 的链接。
标签: android audio-streaming android-seekbar