На данный момент я попробовал API MediaPlayer, MediaMetadataRetriever и MediaExtractor. . Та же проблема воспроизводится с собственным кодом C++ с использованием API AMediaExtractor.
Пример:
Код: Выделить всё
val me = MediaExtractor()
val fis = resources.openRawResourceFd(R.raw.mp4)
me.setDataSource(fis.fileDescriptor, fis.startOffset, fis.length)
val format = me.getTrackFormat(1)
val language = format.getString(MediaFormat.KEY_LANGUAGE)
Я также воспроизвел ту же проблему на Android 8.1.0 Asus Rog Phone
MIME для той же дорожки — audio/mp4a-latm. Я пробовал аудиофайл *.m4a, но с ним возникла та же проблема.
Декодером на неисправных устройствах кажется OMX.google.aac, но я я нашел другие устройства с этим декодером, которые работают нормально.
Данные MediaFormat
Хорошее устройство (Galaxy 21 Plus)
Плохое устройство (Razer Phone) 2)
максимальный битрейт
96000
96000
isDMCMMExtractor
1
1
частота дискретизации
48000
48000
идентификатор трека
2
2
mime
audio/mp4a-latm
audio/mp4a-latm
профиль
2
Код: Выделить всё
Field Missingбитрейт
96000
96000
язык
дан
und
aac-профиль
2
2
трек-четвёртый
- 1
Код: Выделить всё
Field Missingзадержка кодировщика
2112
Код: Выделить всё
Field MissingdurationUs
725333
725333
количество каналов
2
2
битов на выборку
16
16
заполнение кодировщика
705
Код: Выделить всё
Field Missingмаксимальный размер ввода
524308
65538
csd-0
[ 17, -112]
[17, -112]
Используемый файл создан с помощью интерфейса командной строки FFMPEG и содержит 8 звуковых дорожек, но я также извлек из него звук и использовал его для тестирования с той же проблемой.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -correctly
Мобильная версия