Точность поиска Android MediaExtractor() с аудиофайлами MP3

У меня возникли проблемы с получением достаточной точности для seek() с Android MediaExtractor. Для некоторых файлов, таких как этот, я нахожу существенные неточности (около 3 секунд в этом случае.) У меня есть следующий поток:

  1. позвоните setDataSource() и selectTrack()
  2. позвони seekTo()
  3. позвони play()

В этом случае он ищет неправильную позицию, но сообщает правильную позицию. Если я затем ищу другую позицию, она продолжает отклоняться с тем же пределом. Однако, если я ищу 0, он исправляет себя, а затем ищет правильное место в файле.

Это просто ограничение/ошибка в MediaExtractor? У кого-нибудь есть исправление/обходной путь для большей точности? Я бы предпочел не начинать воспроизведение с позиции 0 перед поиском, но я полагаю, что это один из вариантов.

Некоторые другие примечания:

  • Android MediaPlayer показывает такое же поведение.
  • Это происходит независимо от того, выбираю ли я MediaExtractor.SEEK_TO_PREVIOUS_SYNC или SEEK_TO_CLOSEST_SYNC
  • Я вижу ту же проблему на KitKat и Lollipop, на эмуляторе и физических устройствах.
  • Быстрый анализ одного неудачного файла показал «Неправильное количество байтов данных MPEG, указанное в заголовке Xing», но я получил тот же результат для файлов, которые воспроизводились нормально.

person Tad    schedule 22.05.2015    source источник
comment
Это известное ограничение, см. здесь. Возможно, вы могли бы обойти это, включая свою собственную библиотеку.   -  person JonasCz    schedule 22.05.2015
comment
Спасибо, что заглянули! Я просмотрел этот отчет о проблеме, но я не думаю, что это одно и то же. Постер ищет точность выборки вместо точности микросекунды. Миллисекундная точность меня вполне устраивает, но на нескольких записях, когда я выполняю поиск перед загрузкой, я получаю ошибки более чем на секунду. Другие работают нормально, как и те, когда я запускаю воспроизведение с самого начала.   -  person Tad    schedule 25.05.2015
comment
Я еще не пробовал, но у ExoPlayer есть собственный класс MediaExtractor для MP3 (и некоторых других форматов). Если Google отказывается от собственного MediaExtractor, возможно, стоит сделать то же самое (и использовать их код) github.com /google/ExoPlayer/blob/master/library/src/main/java/   -  person Tad    schedule 06.06.2015
comment
Возможно, но я никогда не работал со звуком на Android, так что тут особо помочь не могу.   -  person JonasCz    schedule 06.06.2015
comment
@Tad, как ты решил эту проблему? У меня сейчас аналогичная проблема, и я задал этот вопрос: файлы на android">stackoverflow.com/questions/53742145/   -  person Vasiliy    schedule 12.12.2018
comment
@vasiliy Я вернулся к MediaPlayer по другим причинам и просто работал с неточностями.   -  person Tad    schedule 13.12.2018
comment
@Тад, хорошо, спасибо. Попробую и это.   -  person Vasiliy    schedule 13.12.2018