Android多媒体开发 android mediaplayer
2010-07-06 17:16
417 查看
最近在看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; } } }
相关文章推荐
- Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器
- Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器
- Android MediaPlayer Playback---多媒体开发应用程序接口
- Android MediaPlayer Playback---多媒体开发应用程序接口
- Windows Mobile多媒体开发总结之Media Player Plugins
- Android开发之MediaPlayerService服务详解(一)
- android开发 java.lang.IllegalStateException at android.media.MediaPlayer._prepare(Native Method)
- Windows Mobile多媒体开发总结之Media Player Plugins
- Android音频开发之MediaRecorder/MediaPlayer
- [置顶] Android开发之MediaPlayerService服务详解(一)
- android开发之MediaPlayer+Service MP3播放器
- Windows Mobile多媒体开发总结之Media Player Plugins
- Android多媒体开发【11】-- android中OpenMax的实现【2】AwesomePlayer中openmax的入口
- android开发之MediaPlayer+Service MP3播放器
- Android_利用SurfaceView + MediaPlayer开发最简单的播放器
- Android多媒体之MediaPlayerService
- android开发SurfaceView+MediaPlayer实现视频播放
- Android多媒体开发【11】-- android中OpenMax的实现【2】AwesomePlayer中openmax的入口
- android开发之MediaPlayer+Service MP3播放器