2017-08-28 6 views
0

Je développe une application qui lit le flux audio http et je dois vérifier un flux audio si cela fonctionne correctement. Le problème est que j'ai trouvé le moyen de le faire mais cela prend trop de temps, j'ai essayé de diminuer le temps mais sans résultat. Je pense que mediaplayer réessaye de se connecter au flux "mort" pendant 10 fois avant qu'il ne s'arrête, donc le problème est de savoir comment puis-je arrêter manuellement cette reconnexion après le premier échec, car errorListener n'attrape pas cette erreur.mediaplayer onErrorListener n'attrape pas les erreurs

08-28 08:58:41.211 1335-12727/? E/NuCachedSource2: source returned error -1, 10 retries left 

Voici mon code:

class CheckTask extends AsyncTask<RadioStation, Void, Boolean> { 
    @Override 
    protected Boolean doInBackground(final RadioStation... radioStation){ 




     final MediaPlayer mediaPlayer = new MediaPlayer(); 

     try { 

      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mediaPlayer.setDataSource(radioStation[0].mUrl); 

      mediaPlayer.prepareAsync(); 
      System.out.println(radioStation[0].mName + "prepare Async"); 
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

       @Override 
       public void onPrepared(MediaPlayer mp) { 
        System.out.println(radioStation[0].mName + " OK"); 
        mediaPlayer.release(); 
       } 
      }); 

      mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
       @Override 
       public boolean onError(MediaPlayer mp, int what, int extra) { 
        System.out.println(radioStation[0].mName + " Error"); 

        return true; 
       } 
      }); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("Exception radio check " + e); 
      mediaPlayer.reset(); 
      mediaPlayer.release(); 
     } 










     return true; 

    } 



    @Override 
    protected void onPostExecute(Boolean aBoolean){ 
     super.onPostExecute(aBoolean); 


    } 

} 

Répondre

1

Pourquoi vous appelez mediaPlayer.release(); sur onPrepared?. Il devrait être mediaPlayer.start(). Et puisque vous libérez le Mediplayer onErrorListner ne serait pas appelé.

+0

Je ai seulement besoin de savoir si le flux fonctionne, il attrape les erreurs, mais comment attraper la source a renvoyé l'erreur - c'est la question. –

+1

Je viens de répondre à cela. Pouvez-vous s'il vous plaît remplacer mediaPlayer.release() avec mediaPlayer.start() sur mediaPlayer.setOnPreparedListeners onPrepared? .Et vérifier si la même erreur se produit. –

+0

la même erreur ... –