2012-04-08 37 views
4

我正在使用音頻流播放設備上的MP3文件,並且在ICS出來之前沒有問題。然後,我想這可能是一個格式支持問題,所以香港專業教育學院嘗試用下面的代碼OGG文件:在ICS上流式音頻問題

MediaPlayer mmp= MediaPlayer.create(context, 
         Uri.parse("http://vorbis.com/music/Epoq-Lepidoptera.ogg")); 
mmp.start(); 

這適用於早期的操作系統版本,但無法對ICS。我也曾嘗試使用onPreparesListener ATC,但仍是同樣的錯誤與setDataSource(this, uri)創建媒體播放器:

 
04-08 09:52:12.459: D/MediaPlayer(541): Couldn't open file on client side, trying server side 
04-08 09:52:12.489: E/MediaPlayer(541): Unable to to create media player 
04-08 09:52:12.529: D/MediaPlayer(541): create failed: 
04-08 09:52:12.529: D/MediaPlayer(541): java.io.IOException: setDataSource failed.: status=0x80000000 
04-08 09:52:12.529: D/MediaPlayer(541):  at android.media.MediaPlayer._setDataSource(Native Method) 
04-08 09:52:12.529: D/MediaPlayer(541):  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:844) 
04-08 09:52:12.529: D/MediaPlayer(541):  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:806) 
04-08 09:52:12.529: D/MediaPlayer(541):  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:761) 
04-08 09:52:12.529: D/MediaPlayer(541):  at android.media.MediaPlayer.create(MediaPlayer.java:695) 
04-08 09:52:12.529: D/MediaPlayer(541):  at android.media.MediaPlayer.create(MediaPlayer.java:676) 

所以我的問題是如何在ICS使用MediaPlayer的流音頻文件?有沒有人有工作代碼或可能必須有一些特定的文件格式和編碼? 但它吮吸新的操作系統版本不是相容的倒退...

回答

0

我同樣也有同樣的問題,所以我換了齒輪,而不是這樣做,這對我來說工作得很好。但是,您必須將聲音文件保存在res/assets文件夾中。

 try { 
      AssetFileDescriptor afd = getAssets().openFd("mysound.mp3"); 
      mPlayer = new MediaPlayer(); 
      mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
      mPlayer.prepare(); 
      mPlayer.start(); 
     } 
     catch (IllegalStateException e) { 
      Log.d(TAG, "IllegalStateException: " + e.getMessage()); 
     } 
     catch (IOException e) { 
      Log.d(TAG, "IOException: " + e.getMessage()); 
     } 
     catch (IllegalArgumentException e) { 
      Log.d(TAG, "IllegalArgumentException: " + e.getMessage()); 
     } 
     catch (SecurityException e) { 
      Log.d(TAG, "SecurityException: " + e.getMessage()); 
     } 

然後你會釋放通常的方式的資源:

 if(mPlayer != null) { 
      if(mPlayer.isPlaying()) mPlayer.stop(); 
      mPlayer.release(); 
      mPlayer = null; 
     } 

希望這也適用於你。