2017-03-08 11 views
0

Imは私の音楽プレーヤー機能を実装し、時にはOGGファイルは(1、-1010)ザッツはMediaPlayerのエラー(1、-1010)MEDIA_ERROR_UNKNOWN/MEDIA_ERROR_MALFORMED

MEDIA_ERROR_UNKNOWN/MEDIA_ERROR_MALFORMED

を意味し、スローエラー。ファイルフォーマットが間違っていることもあります(70%はそのエラーが発生したとします)。

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

EDIT

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

でテストされて毎回発生しない理由 thatsはあなたがブラウザで動作するこのURLを試しました。 そうでない場合は、ブラウザのURLに直接アクセスしてください。それがそこで演奏されるならば、それはコードの上にあるべきです。 –

+0

hmmm私がテストしているURLはブラウザで毎回動作しますが、別のURLフォームのmp3サンプルを試してみると、いつも私のアプリケーションで動作します。だから、私はそのサーバーの障害と仮定した。応答時間を増やすか、それを処理する方法はありますか? – Expiredmind

関連する問題