2017-08-28 212 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

同樣的錯誤... –