Android MediaPlayer错误(1,-1010)媒体错误\u未知/媒体错误\u格式错误
我实现了我的音乐播放器功能,有时ogg文件会抛出1,-1010,这意味着 媒体错误未知/媒体错误格式错误 错误。文件格式没有问题,因为有时文件加载正确,比如70%正确,30%错误Android MediaPlayer错误(1,-1010)媒体错误\u未知/媒体错误\u格式错误,android,error-handling,android-mediaplayer,Android,Error Handling,Android Mediaplayer,我实现了我的音乐播放器功能,有时ogg文件会抛出1,-1010,这意味着 媒体错误未知/媒体错误格式错误 错误。文件格式没有问题,因为有时文件加载正确,比如70%正确,30%错误 private void loadAudio(){ if(!readyToPlay){ elapsedTimeStart.setText(""); elapsedTimeEnd.setText(context.getString(R.string.load
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方法。是否有方法检查此状态下何时发生媒体错误\u未知/MEDIA\u错误\u格式不正确,并调用loadAudio功能以获得正确的跟踪?URL有问题,URL不正确或服务器未通过此URL发送正确的响应。
这就是为什么这个URL给这个错误媒体错误格式错误
编辑
但这个问题并不是每次我用同一个URL测试时都会出现。你是否尝试过在浏览器上使用这个URL。如果没有,请点击此URL直接浏览。如果它在那里播放,那么它应该在code.hmmm上。我每次在浏览器中测试的url都有效,但当我测试另一个url表单示例mp3页面时,它在我的应用程序中每次都有效。所以我认为这是服务器的故障。有没有办法增加或处理响应时间?响应取决于服务器,但您可以通过在MediaPlayer上设置onErrorListener来处理您的响应。这将为您提供错误代码,该代码将帮助您处理应用程序。查看我的编辑
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;
}
});