У меня очень простое приложение, которое ищет при позиционировании определенную позицию mp3 и запускает MediaPlayer с этой позиции. Я вижу, однако, что при воспроизведении позиция поиска всегда сдвигается примерно на 2-3 секунды вперед или назад. Я пробовал mp3 с 16, 32 и переменными битрейтами. Только файлы wav работают нормально, но они непрактичны из-за их размера для моей цели. Интересно, если я вычислил поиск вручную (16 * 24000 в случае 16-битного mp3, например) и передал его как смещение к mp.setDataSource, он работает нормально. Я не могу использовать это, потому что мне также нужен TimedText в моем приложении, который не работает со смещением. Было бы очень полезно помочь.Android MediaPlayer seekTo не ищет нужную позицию
Вот полный код:
package com.example.mediaplayertest;
import java.io.FileDescriptor;
import java.io.IOException;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
public class MainActivity extends Activity implements MediaPlayer.OnSeekCompleteListener{
static MediaPlayer mp = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
AssetFileDescriptor afd = getAssets().openFd("English text only.mp3");
long length = afd.getLength();
FileDescriptor fd = afd.getFileDescriptor();
mp.reset();
mp.setDataSource(fd, 0, length);
afd.close();
mp.setOnSeekCompleteListener(this);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepare();
mp.seekTo(24000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onSeekComplete(MediaPlayer mp) {
int pos = mp.getCurrentPosition();
//debug shows the pos value correctly as 24000
mp.start();
}
}
Вы взглянули на мой ответ? –