У меня возникли проблемы с получением достаточной точности для seek() с Android MediaExtractor
. Для некоторых файлов, таких как этот, я нахожу существенные неточности (около 3 секунд в этом случае.) У меня есть следующий поток:
- позвоните
setDataSource()
иselectTrack()
- позвони
seekTo()
- позвони
play()
В этом случае он ищет неправильную позицию, но сообщает правильную позицию. Если я затем ищу другую позицию, она продолжает отклоняться с тем же пределом. Однако, если я ищу 0, он исправляет себя, а затем ищет правильное место в файле.
Это просто ограничение/ошибка в MediaExtractor? У кого-нибудь есть исправление/обходной путь для большей точности? Я бы предпочел не начинать воспроизведение с позиции 0 перед поиском, но я полагаю, что это один из вариантов.
Некоторые другие примечания:
- Android MediaPlayer показывает такое же поведение.
- Это происходит независимо от того, выбираю ли я
MediaExtractor.SEEK_TO_PREVIOUS_SYNC
илиSEEK_TO_CLOSEST_SYNC
- Я вижу ту же проблему на KitKat и Lollipop, на эмуляторе и физических устройствах.
- Быстрый анализ одного неудачного файла показал «Неправильное количество байтов данных MPEG, указанное в заголовке Xing», но я получил тот же результат для файлов, которые воспроизводились нормально.