У меня недостаточно очков репутации, чтобы комментировать ответ mdiener, но метод seekTo (0) работает, и это одна из самых странных ошибок, которые я видел в своей карьере.
В качестве теста я рассчитал время воспроизведения файла на Android и iOS (локальный файл, только метод воспроизведения по времени). Android всегда занимал около 100 мсек, чтобы воспроизвести файл. Я добавил код seekTo (0), и теперь они постоянно находятся в пределах 20 мс.
Я могу только представить, что prepare () на самом деле не готовит все необходимое, и что-то, что занимает некоторое время, выгружается, пока файл не будет воспроизведен.