2012-04-08 36 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; 
     } 

希望这也适用于你。