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()
関数を呼び出す方法はありますか?
を与えるが、この問題は、アイブ氏は、同じURL – Expiredmind
でテストされて毎回発生しない理由 thatsはあなたがブラウザで動作するこのURLを試しました。 そうでない場合は、ブラウザのURLに直接アクセスしてください。それがそこで演奏されるならば、それはコードの上にあるべきです。 –
hmmm私がテストしているURLはブラウザで毎回動作しますが、別のURLフォームのmp3サンプルを試してみると、いつも私のアプリケーションで動作します。だから、私はそのサーバーの障害と仮定した。応答時間を増やすか、それを処理する方法はありますか? – Expiredmind