我可以在 4.1+ 版本中播放 Icecast2 url,但在早期版本中它会抛出 IOException。
我已经使用此代码播放音频流。
try { this.mPlayer = new MediaPlayer(); this.mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //this.mPlayer = MediaPlayer.create(context,Uri.parse("http://176.31.115.196:8214/")); this.mPlayer = MediaPlayer.create(context, Uri.parse("http://184.107.191.197:8065/live")); this.mPlayer.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); } catch (IllegalStateException e) { Log.d(TAG, "IllegalStateException: " + e.getMessage()); } catch (IllegalArgumentException e) { Log.d(TAG, "IllegalArgumentException: " + e.getMessage()); } catch (SecurityException e) { Log.d(TAG, "SecurityException: " + e.getMessage()); } catch (Exception e) { Log.d(TAG, "Exception: " + e.getMessage()); }
我得到了这个例外..
错误 (1, -2147483648)
创建失败:
java.io.IOException: Prepare failed.: status=0x1
at android.media.MediaPlayer.prepare(Native Method)
at android.media.MediaPlayer.create(MediaPlayer.java:632)
在 android.media.MediaPlayer.create(MediaPlayer.java:609)
在 com.Rcc.Common.UserPublicData.createNewMediaPlayer(UserPublicData.java:170)
在 com.Rcc.Submain.PlaySubview$PrepareStream.doInBackground(PlaySubview.java:837 ) )
在 com.Rcc.Submain.PlaySubview$PrepareStream.doInBackground(PlaySubview.java:1)
在 android.os.AsyncTask$2.call(AsyncTask.java:185)
在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask .java:306)
在 java.util.concurrent.FutureTask.run(FutureTask.java:138)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java :581)
在 java.lang.Thread.run(Thread.java:1019)
异常:空
另一个 url 工作正常,只有 icecast url 有问题。请注意,该 url 在 JellyBean 版本中工作正常。