2017-08-28 210 views
0

我正在开发一个播放http音频流的应用程序,我必须检查音频流是否正常工作。问题是我已经找到了如何做到这一点的方法,但这需要太多时间,我试图减少时间,但没有结果。我认为媒体播放器在停止前重新连接到“死”流10次,所以问题是如何在第一次失败后手动停止此重新连接,导致errorListener不捕获此错误。mediaplayer onErrorListener不会捕获错误

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

这里是我的代码:

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); 


    } 

} 

回答

1

你为什么要呼吁onPreparedmediaPlayer.release();?它应该是mediaPlayer.start()。而且,由于您正在发布Mediplayer,所以不会调用onErrorListner

+0

我只需要知道流是否有效,它会捕获错误,但是如何捕获源返回的错误 - 多数民众赞成在问题。 –

+1

我只是回答了。你可以用mediaPlayer.setOnPreparedListeners onPrepared?替换mediaPlayer.release()和mediaPlayer.start(),并检查是否发生相同的错误。 –

+0

同样的错误... –