Android多媒体开发

 本文来自安卓航班网 www.connectionwe.com

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

转载于:https://www.cnblogs.com/androidghost/archive/2011/05/02/connectionwe.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值