Android MediaPlayer не будет воспроизводить потоки MP3 на эмуляторах с API 25 - PullRequest
0 голосов
/ 17 сентября 2018

Я не могу заставить 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

Спасибо за любые предложения.

...