Domanda

Hey, Sto usando MediaPlayer per riprodurre un flusso ShoutCast regolare. Il codice è semplice con prepareAsync () e un gestore per avviare la riproduzione. Mentre funziona perfettamente con alcuni corsi d'acqua come DI.FM o ETN.FM (http://u10.di.fm:80/di_progressive), con gli altri (http://mp3.wpsu.org:8000/) ha vinto' t andare oltre lo stato di preparazione. No altri ascoltatori sono chiamati sia.

//Uri streamUri = Uri.parse("http://u10.di.fm:80/di_progressive"); /* works */
Uri streamUri = Uri.parse("http://mp3.wpsu.org:8000/"); /* stuck on prepare state */
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }
});
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(this.getBaseContext(), streamUri);
mediaPlayer.prepareAsync();

Qualsiasi commento è apprezzato!

È stato utile?

Soluzione

Credo che ci sono alcuni problemi di compatibilità con la fine del server. Questo è piuttosto strano dato che le maniglie emulatore è ok nel mio caso -. Semplicemente non sul mio Galaxy S Froyo, anche se è la stessa versione API

Potrebbe essere un problema di codec, http streaming di problema, non lo so. Ma tutti i server che non riescono tendono a essere quelli vecchi, con "Copyright 1998-2004". In basso ... Non esattamente recenti o aggiornate si potrebbe pensare

Una soluzione potenziale (che non ho ancora provato) sarebbe quella di utilizzare il StreamProxy , che sarebbe anche rendere il codice compatibile con 2.1 e versioni precedenti, eventualmente, anche. A costo di lavoro extra, codice extra, e senza dubbio più bug ...

Nel caso in cui non si è a conoscenza di esso, v'è un altro rapporto giocatore bug per il 2.2 che può essere rilevante anche: opere base di streaming audio a 2.1, ma non a 2.2

Altri suggerimenti

Sto affrontando un problema quando MP "si blocca" a preparare stato troppo a lungo (flusso) e sto cercando di fermarla con reset (). Questo fa sì che MP per appendere e quindi tutto il mio congela app. Sembra che non v'è alcun modo per fermare MP a preparare Stato. Im pensando sull'uso preparare () avvolto in discussione, invece di prepareAsync (). Allora sarò in grado di uccidere quel filo. Come per ora l'ho fatto in questo modo:

private void actionCancel(){
            try {
                mp.setDataSource(new String());
            } catch (Exception e) {
                e.printStackTrace();
                android.util.Log.d(TAG,"actionCancel(): mp.setDataSource() exception");
                mp.reset();
            }
}

e funziona 4me.
Inoltre ho un contatore seguente:

    @Override
    public void onBufferingUpdate(final MediaPlayer mp, final int percent) {

        if (!mp.isPlaying()){
//          android.util.Log.d(TAG,"onBufferingUpdate(): onBufferingUpdateCount = "+onBufferingUpdateCount);
            if (onBufferingUpdateCount>MAX_BUFFERING_UPDATES_AT_PREPARING_STATE)
                restartMP();
            onBufferingUpdateCount++;
            return;
        }
      }

Mi piacerebbe scoprire questo ascoltatore innesca sempre a preparare Stato. Quindi, se si innesca più di 10 volte e MP non è ancora in gioco sto solo riavviarlo:

private void restartMP(){
        if (mp!=null)
            if (mpState==MediaPlayerState.Preparing)
                actionCancel();
            else
                mp.reset();
    else
        mp = new MediaPlayer();
        mpState = MediaPlayerState.Idle;
        onBufferingUpdateCount=0;
        //isRequestCancelled=false;
        requestTrackInfoStartedAt=0;
        requestPlay();
}

Nota MediaPlayerState è il mio enum personalizzato che ha un valore "Preparazione". Anche mpState è una struttura / campo di classe che mantiene lo stato MediaPlayerState corrente. Prima di iniziare prepareAsync () im impostazione mpState per MediaPlayerState.Preparing dopo aver completato im impostazione per MediaPlayerState.Started o altro valore corrispondente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top