我正在开发一个播放http音频流的应用程序,我必须检查音频流是否正常工作。问题是我已经找到了如何做到这一点的方法,但是花了太多时间,我试图减少时间但没有结果。我认为媒体播放器在停止之前重试连接到“死”流10次,所以问题是如何在第一次失败后手动停止重新连接,导致errorListener没有捕获到这个错误。
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);
}
}
答案 0 :(得分:1)
为什么要在mediaPlayer.release();
上致电onPrepared
?它应该是mediaPlayer.start()
。而且,由于您正在发布Mediplayer onErrorListner
,因此无法调用。