Reputation: 1842
I'm using audio streaming to play MP3 files on a device and had no problems until ICS came out. Then I thought it might be a format support issue so ive tried OGG files with the following code :
MediaPlayer mmp= MediaPlayer.create(context,
Uri.parse("http://vorbis.com/music/Epoq-Lepidoptera.ogg"));
mmp.start();
This works on earlier OS versions but fails on ICS. I have also tried creating media player with setDataSource(this, uri)
using onPreparesListener atc but still the same error:
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)
So my question is how to stream audio files using MediaPlayer on ICS? Does anyone have working code or maybe there must be some specific file format and encoding? But it sucks that new os version isnt compatibile backwards...
Upvotes: 4
Views: 707
Reputation: 2674
I likewise had the same problem, so I switched gears and did this instead, which has worked fine for me. You have to keep your sound files in a res/assets folder however.
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());
}
And then you would release the resources in the usual way:
if(mPlayer != null) {
if(mPlayer.isPlaying()) mPlayer.stop();
mPlayer.release();
mPlayer = null;
}
Hope this works for you too.
Upvotes: 0