MediaPlayer SeekTo()

Ответить
alex.ok
Сообщения: 12
Зарегистрирован: 11 ноя 2013, 16:30

MediaPlayer SeekTo()

Сообщение alex.ok » 14 окт 2015, 13:29

Всем привет.
Кто знает, помогите.
Проблема в том что на устройствах с версией Андрид 4.2 и младше некорректно работает метод seekTo() класса MediaPlayer. На mp3 файлах большой длины, у меня около 40 минут, можно нормально делать SeekTo() в пределах первых 9 минут трека. Если пытаться позиционировать на больше, то этот метод с пятого на десятый раз делает это правильно, а в основном соскакивает ближе к началу трека. При этом первые мгновения считает, что сделал все правильно. Т.е. если сразу вызвать getCurrentPosition() он выдает именно то значение, на которое я его seekTo. А чуть позднее уже дает верную инфу.
Чего я только не делал: и prepareListener, и seekToListener, и с предварительной паузой, и проверками mediaplayer!=null и mediaplayer.isPlaying. Все ему по барабану. Потому что этот метод уверен, что все сделал правильно.
Какие есть у меня мысли:
1 )раскодировать mp3 сторонним декодером а потом это скармливать в AudioTrack - довольно муторно и непонятки с лицензиями, но тоже вариант.
2) делить трек на много кусков минут по 5 - замучаюсь я 15 часов звука делить на такие куски, тоже не наш метод
3) запускать воспроизведение и спустя какое-то время делать seekTo - рабочий вариант, но плохо что успевают проскочить обрывки звуков до того как сделал seekTo
4) попробовать перекодировать в .ogg - хотелось бы остаться на mp3, и еще не факт, что поможет.

Рыскал на забугорных разных форумах, так и не нашел подходящего простого решения.
Может кто уже сталкивался с такой проблемой, поделитесь.

Всем спасибо за внимание :D
Сам разобрался. Сделал через ParcelFileDescriptor

Ответить