zoukankan      html  css  js  c++  java
  • Android多媒体开发 android mediaplayer

          最近在看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;
      }
     }
    }

  • 相关阅读:
    UVa Live 3942 Remember the Word
    UVa 11019 Matrix Matcher
    bzoj 4445 小凸想跑步
    Codeforces 832E Vasya and Shifts
    二值法方法综述及matlab程序
    排序算法(1)-插入,选择,冒泡
    如果我想了解一个陌生人
    Libsvm在matlab环境下使用指南
    科学预测世界杯-采用机器学习方法
    应用笔画宽度变换(SWT)来检测自然场景中的文本
  • 原文地址:https://www.cnblogs.com/xianghang123/p/1705349.html
Copyright © 2011-2022 走看看