2017-03-08 59 views
0

進出口實現我的音樂播放器功能,有時OGG文件拋出(1,1010)這就是意味着MediaPlayer的錯誤(1,1010)MEDIA_ERROR_UNKNOWN/MEDIA_ERROR_MALFORMED

MEDIA_ERROR_UNKNOWN/MEDIA_ERROR_MALFORMED

錯誤。文件格式沒有問題,因爲有時文件加載正確(可以說70%正確的30%得到了這個錯誤)。

private void loadAudio(){ 
     if(!readyToPlay){ 
      elapsedTimeStart.setText(""); 
      elapsedTimeEnd.setText(context.getString(R.string.loading)); 
      mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     try { 
      mediaplayer.setDataSource(audioURL); 
      mediaplayer.prepareAsync(); 
      mediaplayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { 
       @Override 
       public void onBufferingUpdate(MediaPlayer mp, int percent) { 
        double ratio = percent/1000.0; 
        bufferingLevel = (int)(mp.getDuration() * ratio); 
        seekBar.setSecondaryProgress(bufferingLevel/SECOND); 
       } 
      }); 
      mediaplayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
       @Override 
       public boolean onError(MediaPlayer mp, int what, int extra) { 
        Log.i("lang","on error " +what +" extra "+ extra); 
        switch (what) { 
         case MEDIA_ERROR_UNKNOWN: 
          Log.i(TAG, "MEDIA_ERROR_UNKNOWN"); 
          break; 
         case MEDIA_ERROR_SERVER_DIED: 
          Log.i(TAG, "MEDIA_ERROR_SERVER_DIED"); 
          Toast.makeText(context, context.getString(R.string.problems_connecting_try_again), Toast.LENGTH_SHORT).show(); 
          break; 
        } 
        switch (extra) { 
         case MEDIA_ERROR_IO: 
          Log.i(TAG, "MEDIA_ERROR_IO"); 
          break; 
         case MEDIA_ERROR_MALFORMED: 
          Log.i(TAG, "MEDIA_ERROR_MALFORMED"); 
          break; 
         case MEDIA_ERROR_UNSUPPORTED: 
          Log.i(TAG, "MEDIA_ERROR_UNSUPPORTED"); 
          break; 
         case MEDIA_ERROR_TIMED_OUT: 
          Log.i(TAG, "MEDIA_ERROR_TIMED_OUT"); 
          Toast.makeText(context, context.getString(R.string.problems_connecting_try_again), Toast.LENGTH_SHORT).show(); 
          break; 
        } 
        return false; 
       } 
      }); 

      mediaplayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mp) { 
        Log.i("lang", " SUCCEFULLY PREPARED"); 
        readyToPlay = true; 
        durationTime = mp.getDuration(); 
        durationHour = durationTime /HOUR; 
        durationMint = (durationTime %HOUR)/MINUTE; 
        durationSec = (durationTime %MINUTE)/SECOND; 
        elapsedTimeStart.setText(String.format("%02d:%02d:%02d",currentHour,currentMin,currentSec)); 
        elapsedTimeEnd.setText(String.format("%02d:%02d:%02d", durationHour, durationMint, durationSec)); 
        seekBar.setMax(durationTime /SECOND); 
        play(); 
       } 
      }); 
     } catch (IllegalArgumentException|SecurityException|IllegalStateException|IOException e) { 
      Log.i("lang","Exception!"); 
      e.printStackTrace(); 

     } 
     catch (Exception e){ 
      Log.i("lang", "Exception!! smthing goes wrong "); 
      e.printStackTrace(); 

     } 

     seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       if (mediaplayer != null && fromUser) { 
        timeElapsed = durationTime * progress/100; 
        mediaplayer.seekTo(timeElapsed); 
        if (durationTime/SECOND == timeElapsed/SECOND) 
         stop(); 
       } 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
      } 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
      } 
     }); 
    }} 

編輯:我調試我的程序和mediaplayer.prepareAsync()後觸發第一個回調onPrepared方法。有沒有辦法在這種狀態下檢查(MEDIA_ERROR_UNKNOWN/MEDIA_ERROR_MALFORMED)何時發生,並調用loadAudio()函數來獲取正確的音軌?

回答

1

URL存在問題,URL不正確或服務器未發送此URL的正確響應。 這就是爲什麼這個URL給這個錯誤MEDIA_ERROR_MALFORMED

編輯

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) { 

       LogUtils.e(TAG, "onError() called : what=="+what); 
       LogUtils.e(TAG, "onError() called : extra=="+extra); 

       return false; 
      } 
     }); 
+0

但這個問題每當伊夫用相同的URL – Expiredmind

+0

一直在測試你試試這個URL瀏覽器的工作不會發生。如果不是,則直接點擊這個URL到瀏覽器。如果它在那裏播放,那麼它應該是代碼。 –

+0

hmmm我測試過的網址每次都在瀏覽器中工作,但是當我測試了另一個url表單樣本mp3頁面時,它每次都在我的應用程序中運行。所以我認爲它的服務器故障。有什麼方法可以增加響應時間或處理它? – Expiredmind