灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3285回复:0

Android中的多媒体

楼主#
更多 发布于:2012-12-17 15:06

本文介绍多媒体的音频和视频播放。

播放音频和视频的源文件可以是一下三种:

源文件(即res/raw下或assets下)
文件系统(即sdcard)
流媒体(即网络)

1. 播放音频文件
播放音频文件可以用MediaPlayer类或SoundPool类。下面我们来介绍这两个类。


1.1 MediaPlayer从源文件(即res/raw下或assets下)播放音频


[java]
mMediaPlayer = MediaPlayer.create(this, R.raw.sleep_away);  
mMediaPlayer.start();  

mMediaPlayer = MediaPlayer.create(this, R.raw.sleep_away);
mMediaPlayer.start();
1.2 MediaPlayer从文件系统(即sdcard)播放音频


[java]
String filePath = Environment.getExternalStorageDirectory().getPath() + File.separator + "sleep_away.mp3";// /mnt/sdcard/sleep_away.mp3  
mMediaPlayer = new MediaPlayer();  
try {  
   mMediaPlayer.setDataSource(filePath);  
   mMediaPlayer.prepare();  
} catch (Exception e) {  
   e.printStackTrace();  
}  
mMediaPlayer.start();  

String filePath = Environment.getExternalStorageDirectory().getPath() + File.separator + "sleep_away.mp3";// /mnt/sdcard/sleep_away.mp3
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(filePath);
mMediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mMediaPlayer.start();方法二:


[java]
String filePath = Environment.getExternalStorageDirectory().getPath() + File.separator + "sleep_away.mp3";// /mnt/sdcard/sleep_away.mp3  
mMediaPlayer = MediaPlayer.create(this, Uri.parse(filePath));  
mMediaPlayer.start();  

String filePath = Environment.getExternalStorageDirectory().getPath() + File.separator + "sleep_away.mp3";// /mnt/sdcard/sleep_away.mp3
mMediaPlayer = MediaPlayer.create(this, Uri.parse(filePath));
mMediaPlayer.start();
1.3 MediaPlayer从流媒体(即网络)播放音频

添加权限<uses-permission android:name="android.permission.interNET" />


[java]
filePath = "http://www.xyz.com/Audio/sample.mp3";  
mMediaPlayer = new MediaPlayer();  
try {  
   mMediaPlayer.setDataSource(filePath);  
   mMediaPlayer.prepare();  
} catch (Exception e) {  
   e.printStackTrace();  
}  
mMediaPlayer.start();  

filePath = "http://www.xyz.com/Audio/sample.mp3";
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(filePath);
mMediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mMediaPlayer.start();方法二:


[java]
filePath = "http://www.xyz.com/Audio/sample.mp3";  
mMediaPlayer = MediaPlayer.create(this, Uri.parse(filePath));  
mMediaPlayer.start();  

filePath = "http://www.xyz.com/Audio/sample.mp3";
mMediaPlayer = MediaPlayer.create(this, Uri.parse(filePath));
mMediaPlayer.start();
另外,MediaPlayer的几个方法介绍一下:

start():开始播放
pause():暂停播放
reset() + prepare() + start():重新播放(其实MediaPlayer的create方法会首次调用prepare()方法)
另外,在onDestroy()方法中必须释放MediaPlayer的资源:


[java]
@Override  
protected void onDestroy() {  
   super.onDestroy();  
   if (mMediaPlayer != null) {  
       mMediaPlayer.release();  
       mMediaPlayer = null;  
   }  
}  

@Override
protected void onDestroy() {
super.onDestroy();
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
1.4 SoundPool播放音频文件

开发Android软件中我们可能经常需播放多媒体声音文件,一般使用MediaPlayer类但该类占用资源较多,对于游戏等应用可能不是很适合,SoundPool类在SDK的android.media.SoundPool,顾名思义是声音池的意思。主要播放一些较短的声音片段,可以从程序的资源或文件系统加载,相对于MediaPlayer类可以做到使用较少的cpu资源和较短的反应延迟。

SoundPool和其他声音播放类相比,其特点是可以自行设置声音的品质、音量、播放比率等参等。并且它可以同时管理多个音频流,每个流都有独自的ID,对某个音频流的管理都是通过ID进行的。

SoundPool基本使用方法:

创建一个SoundPool对象:new SoundPool(int maxStreams, int streamType, int srcQuality);
从资源或者文件载入音频流:load(Context context, int resId, int priority);
播放声音:play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
关于SoundPool的用法参见Demohttp://download.csdn.net/detail/tianjf0514/4895976



2. 播放视频文件

播放视频有两种方法,一种是用VideoView播放,另一种是用SurfaceView播放。

2.1 VideoView播放方式可以用VideoView.setVideoURI()和VideoView.setVideoPath两种方式播放视频

从文件系统(即sdcard)



[java]
videoView.setVideoURI(Uri.parse(Environment.getExternalStorageDirectory().getPath() + File.separator + "wild_life.mp4"));  

videoView.setVideoURI(Uri.parse(Environment.getExternalStorageDirectory().getPath() + File.separator + "wild_life.mp4"));
[java]
videoView.setVideoPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "wild_life.mp4");  

videoView.setVideoPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "wild_life.mp4");
从流媒体(即网络)


[java]
videoView.setVideoURI(Uri.parse("http://v.pps.tv/play_3445G7.html"));  

videoView.setVideoURI(Uri.parse("http://v.pps.tv/play_3445G7.html"));
[java]
videoView.setVideoPath("http://v.pps.tv/play_3445G7.html");  

videoView.setVideoPath("http://v.pps.tv/play_3445G7.html");
用VideoView的方式播放视频很简单,但是视频的位置和大小不受控制,所以要下面来介绍另一种方式

2.2 SurfaceView播放方式播放视频

SurfaceView的控制接口SurfaceHolder的setFixedSize方法可以设置视频的大小。

具体的SurfaceView怎么播放视频参考Demohttp://download.csdn.net/detail/tianjf0514/4895976













喜欢0 评分0
游客

返回顶部