Android多媒體開發 android mediaplayer

來源:互聯網
上載者:User

      最近在看Android多媒體相關的資料,發現在1.0-r2版本支援的音頻格式amr、mp3、wav、mid,不支援aac格式,Android提供的MediaPlayer不支援類似J2me那樣的流直接建立模式,而流建立顯然是我們開發中最常用的模式,如我們到遠程伺服器下載音頻、視頻資料一般都是流的形式,如何使用流建立MediaPlayer呢?下面的代碼是關於建立MediaPlayer的幾種使用形式。

/**
 * MedaiaPlayer的使用<br>
 * <b>注意:</b>在實際的開發中要寫一個後台服務(Service)來控制 #@see Android Source
 * Music/src/com/android/music/MediaPlaybackService.java
 *
 * @author shenrenkui
 *
 */
public class MediaPlayerDemo extends Activity {
 private Button resButton;
 private Button localFileButton;
 private Button netUrlButton;
 private Button streamButton;
 private MediaPlayer mMediaPlayer;
 private Context mContext;

 public void onCreate(Bundle state) {
  super.onCreate(state);
  mContext = this;
  this.setContentView(R.layout.mediaplayerdemo);

  resButton = (Button) this.findViewById(R.id.res);
  localFileButton = (Button) this.findViewById(R.id.localFile);
  netUrlButton = (Button) this.findViewById(R.id.netUrl);
  streamButton = (Button) this.findViewById(R.id.stream);

  resButton.setOnClickListener(buttonListener);
  localFileButton.setOnClickListener(buttonListener);
  netUrlButton.setOnClickListener(buttonListener);
  streamButton.setOnClickListener(buttonListener);

 }

 /**
  * Button事件響應介面
  */
 private OnClickListener buttonListener = new OnClickListener() {
  public void onClick(View v) {
   try {
    if (resButton.equals(v)) {
     releaseMediaPlayer();
     mMediaPlayer = MediaPlayer.create(mContext,
       R.raw.leave_out_all_the_rest);
     mMediaPlayer.start();

    } else if (localFileButton.equals(v)) {
     Uri playUri = Uri.parse("/sdcard/download/mp3.mp3");
     releaseMediaPlayer();
     mMediaPlayer = MediaPlayer.create(mContext, playUri);
     mMediaPlayer.start();

    } else if (netUrlButton.equals(v)) {
     releaseMediaPlayer();
     //不得已而為之的辦法
     Uri playUri = Uri
       .parse("http://music.isohuo.com/2282/a3dca6eabba74bbd8c46b23e6dddfe43.mp3");
     mMediaPlayer = MediaPlayer.create(mContext, playUri);
     mMediaPlayer.start();

    } else if (streamButton.equals(v)) {
     releaseMediaPlayer();
     mMediaPlayer = create(mContext,
       R.raw.leave_out_all_the_rest);
     mMediaPlayer.start();

    }
   } catch (IllegalStateException e) {
    e.printStackTrace();
   }
  }
 };

 private MediaPlayer create(Context context, int resid) {
  InputStream stream = context.getResources().openRawResource(resid);
  if (stream != null)
   return create(context, stream);
  else
   return null;
 }

 private MediaPlayer create(Context context, InputStream stream) {
  MediaPlayer mediaplayer = null;
  try {
   File temp = File.createTempFile("mediaplayertmp", "temp");
   String tempPath = temp.getAbsolutePath();
   FileOutputStream out = new FileOutputStream(temp);
   //用BufferdOutputStream速度快
   BufferedOutputStream bis = new BufferedOutputStream(out);
   byte buf[] = new byte[128];
   do {
    int numread = stream.read(buf);
    if (numread <= 0)
     break;
    bis.write(buf, 0, numread);
   } while (true);
   MediaPlayer mp = new MediaPlayer();
   mp.setDataSource(tempPath);
   mp.prepare();
   mediaplayer = mp;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return mediaplayer;
 }

 /**
  * 釋放上一次MediaPlayer資源
  */
 private void releaseMediaPlayer() {
  if (mMediaPlayer != null) {
   if (mMediaPlayer.isPlaying()) {
    mMediaPlayer.stop();
   }
   mMediaPlayer.release();
   mMediaPlayer = null;
  }
 }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.