В моем приложении я передаю файлы Mp3 с сервера. Потоковая передача и загрузка работают отлично. Но проблема в поиске в медиаплеере,Android Музыкальный плеер seekto (pos) Воспроизведение музыки при неправильной позиции
как у меня есть 2 мин. Mp3, если я загрузил его и играю, угадайте буферизацию, переходите на 100%, после воспроизведения 50% (означает около 1 мин) , мы ищем 25% (на 30 секунд), Игрок начнет с 10 секунд, это очень странное поведение музыкального плеера
Я пробовал много, но я не могу получить какое-либо решение здесь я расстраивает сейчас, пожалуйста, помогите мне спасибо в adavance
Мой код ниже
Инициировать
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setWakeMode(_context, PowerManager.PARTIAL_WAKE_LOCK);
mPlayer.setOnPreparedListener(this);
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(this);
mPlayer.setOnInfoListener(this);
mPlayer.setOnBufferingUpdateListener(this);
musicseekbar =(SeekBar)findViewById(R.id.seekbar);
currenttime = (TextView)findViewById(R.id.runningtime);
totaltime = (TextView)findViewById(R.id.totaltime);
setSeekbar();
try {
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (Exception e) {
}
mPlayer.setDataSource(manualUrl);
mPlayer.prepareAsync();
Прочее Stuf
private void setSeekbar() {
// TODO Auto-generated method stub
musicseekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
if (fromUser) {
if (mPlayer != null && mPlayer.isPlaying()) {
MusicSeekto(progress,Globals.PlayerDuration);
seekBar.setProgress(progress);
}
}
}
});
}
public void setSeekBarpositionDetail(int position,int currenttime1,int totaltime1) {
// TODO Auto-generated method stub
if (musicseekbar != null) {
musicseekbar.setProgress(currenttime1);
}
}
public void setPlayerInfo(int duration) {
musicseekbar.setMax(duration); // set maximum here
}
public void MusicSeekto(int i, int playerDuration) {
// TODO Auto-generated method stub
if (mPlayer != null) {
mPlayer.seekTo(i); //problem is here , I get here exact "i", but seekto(pos) does't start from that position.
}
}
public void primarySeekBarProgressUpdater() {
if (mPlayer != null) {
stop = (int) (((float) mPlayer.getCurrentPosition()/Globals.PlayerDuration) * 100);
setSeekBarpositionDetail(stop, mPlayer.getCurrentPosition(), mPlayer.getDuration());
}
if (mPlayer != null) {
if (mPlayer.isPlaying()) {
notification = new Runnable() {
public void run() {
primarySeekBarProgressUpdater();
}
};
handler.postDelayed(notification, 100);
}
}
}
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
playerstarting();
primarySeekBarProgressUpdater();
}
private void playerstarting() {
// TODO Auto-generated method stub
if (mPlayer != null) {
mPlayer.start();
}
Globals.PlayerDuration = mPlayer.getDuration();
changingImage(false);
setPlayerInfo(mPlayer.getDuration());// seekbar value passing from here
}
У меня нет никакого процента, я установил максимальное количество очков в поиске. и там я получаю в miliseconds, и что miliseconds ищут (pos) в музыкальном проигрывателе. я все еще получаю проблемы. –
У вас нет кода, который вы разместили здесь. Вы можете опубликовать весь код и очистить отложенные разделы, чтобы мы могли выяснить, что происходит на самом деле. –
У меня был обновленный код, а также прокомментировал эту строку, которая устанавливаетMax в поисковый барабан, пожалуйста, проверьте. Если вам нужна какая-либо дополнительная информация, сообщите мне. –