Я не могу заставить Android MediaPlayer воспроизводить потоки MP3 с серверов Icecast, использующих API 25, на эмуляторах AVD, в то время как тот же код работает на API 24 и ниже. В частности, метод prepare () никогда не возвращается в прикрепленном коде песочницы и не воспроизводит звук. Точно так же, когда я вызываю prepareAsync () в Сервисе, слушатели никогда не вызываются. Logcat не сообщает об ошибках.
Я пишу код для обработки API 26 и выше, но я застрял на API 25.
Отладка до сих пор:
- Я пробовал несколько потоков музыки в формате MP3. Вот два примера, которые не воспроизводятся на API 25+: http://pureradio.eu:8000/low http://shoutingfire -ice.streamguys1.com / live
- Оба этих (и других) потока MP3 успешно воспроизводятся в API 24 и ниже.
- NetworkSecurityPolicy.isCleartextTrafficPermitted (имя хоста) сообщает true.
- Я пытался поменять URL-адреса с http на https, но без улучшения.
- Я попытался воспроизвести файлы MP3 (полученные с серверов Apache), и они успешно воспроизводятся с этим кодом во всех версиях API.
- Увеличена громкость звука.
- Я изучал и тестировал код других игроков, найденных на github (ZeroMediaPlayer и android-UniversalMusicPlayer), но не нашел своей проблемы.
- Кроме того, в доке Android говорится, что MediaPlayer.setAudioStreamType (int streamtype) устарел на уровне API 26. Я не думаю, что это должно повлиять на мои тесты с API 25.
Вот мой фрагмент кода песочницы.
MediaPlayer mediaPlayer = new MediaPlayer();
// For Android API 26 (Android 8 Oreo) and newer, specify AudioAttributes.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
AudioAttributes.Builder builder = new AudioAttributes.Builder();
builder.setUsage(AudioAttributes.USAGE_MEDIA);
builder.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC);
AudioAttributes attributes = builder.build();
mediaPlayer.setAudioAttributes(attributes);
}
else {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
try {
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnInfoListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
}
catch(Exception e) {
Log.d(tag,"ERROR: Caught exception e=" + e.getMessage());
}
mediaPlayer.start();
И выдержки из моего модуля build.gradle:
compileSdkVersion 26
buildToolsVersion "27.0.3"
minSdkVersion 14
targetSdkVersion 26
Спасибо за любые предложения.