MediaPlayerNative: ошибка (1, -2147483648) при воспроизведении HTTP-потока MP3 с прогрессивной разверткой

Я так старался разработать приложение для потоковой передачи интернет-радио, но все, что я получаю, это принудительное закрытие или ошибки. Шаги, которые я предпринял,

  • Я прочитал документацию по MediaPlayer здесь.
  • Я также прочитал уже доступные решения здесь.
  • Я также искал в Google любые решения, но не нашел ни одного.

Вот мой код:

Основная деятельность:

    private Button pbutton;
    private MediaPlayer mediaPlayer;

    pbutton = findViewById(R.id.button_play);
    pbutton.setEnabled(false);

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource("http://streams.abidingradio.org:7800/1");
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.prepareAsync();

    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            pbutton.setEnabled(true);
        }
    });

    pbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mediaPlayer.start();
        }
    });

Манифест:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Когда я запускаю этот код, MediaPlayer не готовится. И он выдает следующие ошибки: нажмите здесь, чтобы просмотреть полный журнал основные ошибки:

failed to init data from source
MediaPlayerNative: error (1, -2147483648)
MediaPlayer: Error (1,-2147483648)

Я занимаюсь этой проблемой уже почти три дня, но до сих пор не нашел решения. Я также могу заверить, что ссылка аудиопотока работает отлично.

Любая помощь будет принята с благодарностью!

Спасибо.


person Jerome Marshall    schedule 21.11.2018    source источник


Ответы (4)


Причина в том, что MediaPlayer не поддерживает потоковый формат MPEGA. Ознакомьтесь с поддерживаемыми аудиоформатами.

Просто используйте один из совместимых сторонних проигрывателей, например IjkPlayer или ExoPlayer

person Onix    schedule 21.11.2018
comment
Спасибо за ваше предложение. Но я не думаю, что проблема в аудиопотоке. Потому что я использовал ту же ссылку на аудиопоток в другом примере приложения с GitHub, и все работало нормально. Но когда я использую его здесь, это происходит. И кстати, как бы узнать формат аудиопотока. - person Jerome Marshall; 21.11.2018
comment
в другом образце приложения с GitHub, и он работал нормально. Могу ли я взглянуть на образец? И, кстати, как узнать формат аудиопотока — просто откройте поток в любом плеере и посмотрите «детали видео» (vlc, mediplayer classic) - person Onix; 21.11.2018
comment
Вот пример, в котором я использовал ссылку. Чтобы заставить его работать, я просто изменил источник данных на ссылку на поток. - person Jerome Marshall; 21.11.2018
comment
Большое спасибо @Onix. Я попробовал ExoPlayer, и он работает! Теперь есть новые ошибки, такие как сбой getDiskStats с результатом NOT_SUPPORTED и размером 0, но он по-прежнему передает звук. - person Jerome Marshall; 21.11.2018

Используйте так.

Объявить:

Uri alarmSound_carHorn;
Ringtone ringtone_carHorn;

Инициализировать (при создании):

alarmSound_carHorn = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +  getApplication().getApplicationContext().getPackageName() + "/" +  R.raw.car_horn);
ringtone_carHorn = RingtoneManager.getRingtone(getApplicationContext(),alarmSound_carHorn);

При звонке:

if(ringtone_carHorn!= null && !ringtone_carHorn.isPlaying()){
    ringtone_carHorn.play();
}
person DSalo    schedule 20.03.2021

У меня была такая же ошибка, но она была только на нескольких телефонах, и я понятия не имел, как ее исправить. В итоге я использовал ExoPlayer

player?.apply {
        val mediaItem: MediaItem = MediaItem.fromUri(url)
        setMediaItem(mediaItem)
        prepare()
        play()
}
person midFang    schedule 04.01.2021

Я получил ту же ошибку только при вызове onPause -> onResume. Это было вызвано setOnPreparedListener. Решение:

binding?.playbackVideoView?.setOnPreparedListener(null)

очистить подготовленный слушатель, чтобы он не использовал старый объект mediaPlayer

person Kallos Zsolty    schedule 09.06.2021