Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Streaming Audio from A URL in Android using MediaPlayer?

I've been trying to stream mp3's over http using Android's built in MediaPlayer class. The documentation would suggest to me that this should be as easy as :

MediaPlayer mp = new MediaPlayer(); mp.setDataSource(URL_OF_FILE); mp.prepare(); mp.start(); 

However I am getting the following repeatedly. I have tried different URLs as well. Please don't tell me that streaming doesn't work on mp3's.

E/PlayerDriver(   31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported W/PlayerDriver(   31): PVMFInfoErrorHandlingComplete E/MediaPlayer(  198): error (1, -4) E/MediaPlayer(  198): start called in state 0 E/MediaPlayer(  198): error (-38, 0) E/MediaPlayer(  198): Error (1,-4) E/MediaPlayer(  198): Error (-38,0) 

Any help much appreciated, thanks S

like image 661
Pandalover Avatar asked Dec 27 '09 11:12

Pandalover


1 Answers

simple Media Player with streaming example.For xml part you need one button with id button1 and two images in your drawable folder with name button_pause and button_play and please don't forget to add the internet permission in your manifest.

public class MainActivity extends Activity { private Button btn; /**  * help to toggle between play and pause.  */ private boolean playPause; private MediaPlayer mediaPlayer; /**  * remain false till media is not completed, inside OnCompletionListener make it true.  */ private boolean intialStage = true;   @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     btn = (Button) findViewById(R.id.button1);     mediaPlayer = new MediaPlayer();     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);     btn.setOnClickListener(pausePlay);  }  @Override public boolean onCreateOptionsMenu(Menu menu) {     // Inflate the menu; this adds items to the action bar if it is present.     getMenuInflater().inflate(R.menu.activity_main, menu);     return true; }  private OnClickListener pausePlay = new OnClickListener() {      @Override     public void onClick(View v) {         // TODO Auto-generated method stub         // TODO Auto-generated method stub          if (!playPause) {             btn.setBackgroundResource(R.drawable.button_pause);             if (intialStage)                 new Player()                         .execute("http://www.virginmegastore.me/Library/Music/CD_001214/Tracks/Track1.mp3");             else {                 if (!mediaPlayer.isPlaying())                     mediaPlayer.start();             }             playPause = true;         } else {             btn.setBackgroundResource(R.drawable.button_play);             if (mediaPlayer.isPlaying())                 mediaPlayer.pause();             playPause = false;         }     } }; /**  * preparing mediaplayer will take sometime to buffer the content so prepare it inside the background thread and starting it on UI thread.  * @author piyush  *  */  class Player extends AsyncTask<String, Void, Boolean> {     private ProgressDialog progress;      @Override     protected Boolean doInBackground(String... params) {         // TODO Auto-generated method stub         Boolean prepared;         try {              mediaPlayer.setDataSource(params[0]);              mediaPlayer.setOnCompletionListener(new OnCompletionListener() {                  @Override                 public void onCompletion(MediaPlayer mp) {                     // TODO Auto-generated method stub                     intialStage = true;                     playPause=false;                     btn.setBackgroundResource(R.drawable.button_play);                     mediaPlayer.stop();                     mediaPlayer.reset();                 }             });             mediaPlayer.prepare();             prepared = true;         } catch (IllegalArgumentException e) {             // TODO Auto-generated catch block             Log.d("IllegarArgument", e.getMessage());             prepared = false;             e.printStackTrace();         } catch (SecurityException e) {             // TODO Auto-generated catch block             prepared = false;             e.printStackTrace();         } catch (IllegalStateException e) {             // TODO Auto-generated catch block             prepared = false;             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             prepared = false;             e.printStackTrace();         }         return prepared;     }      @Override     protected void onPostExecute(Boolean result) {         // TODO Auto-generated method stub         super.onPostExecute(result);         if (progress.isShowing()) {             progress.cancel();         }         Log.d("Prepared", "//" + result);         mediaPlayer.start();          intialStage = false;     }      public Player() {         progress = new ProgressDialog(MainActivity.this);     }      @Override     protected void onPreExecute() {         // TODO Auto-generated method stub         super.onPreExecute();         this.progress.setMessage("Buffering...");         this.progress.show();      } }  @Override protected void onPause() {     // TODO Auto-generated method stub     super.onPause();     if (mediaPlayer != null) {         mediaPlayer.reset();         mediaPlayer.release();         mediaPlayer = null;     } } 
like image 66
PiyushMishra Avatar answered Oct 03 '22 01:10

PiyushMishra