工程文档:点击打开链接
一.视频播放
private static final String PATH_STRING = "/mnt/sdcard/test.mp4";//定义视频文件的路径,test.mp4文件我们已经事先放在sdcard中
VideoView videoView;
MediaPlayer mediaPlayer;
2.初始化,包括视频文件的加载,设置控制器
videoView.setVideoPath(PATH_STRING);
videoView.setMediaController(new MediaController(this)); //为videoMedia设置控制器
videoView.start();
4.此外,如果需要暂停,则使用pause,需要停止则使用stop,
if(isVideoPause==false){
videoPosition = videoView.getCurrentPosition();
videoView.pause();
isVideoPause = true;
}
else{
videoView.start();
isVideoPause = false;
}
5.最后提一点遇到的小问题,在使用eclipse调试连接手机时,手机是无法读取sdcard的,所以也就无法播放sdcard中的视频文件了,所以千万不要试图在手机还连接电脑的时候播放视频文件。
二.使用soundPool实现音频播放
2. SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。
1.SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。这里一定需要注意不要试图将超过1M的音频加载到soundpool中。
2.SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。
下面来介绍下soundpool相关的方法。
构造方法:
SoundPool(int maxStreams, int streamType, int srcQuality);
macStreams: 能够加载的最大音频数量
streamType: 能够加载的音频类型,一般使用AudioManager.STREAM_MUSIC
srcQuality: 目前没有用,一般为1
int load(Context context, int resId, int priority); 返回音频 stream的id
context:承接上下文,一般使用this
resID:资源文件id
priority:目前没有作用,一般设为1
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate); 返回播放音频的id
soundID: 音频stream的id。使用load方法的返回值
leftVolume:左声道音量
rightColume:右声道音量,使用1即可
priority:优先级:0-9, 0优先度最低
loop重复播放的次数,0为播放一次
rate:播放速率,1为正常速率。
pause(int streamID);暂停音频
参数为play返回的streamID。注意每次play相同的音频时,返回的streamID都是不同的。所以为了暂停上次的音乐,则需要用一个变量记录play的返回值。
使用步骤:
1.
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
2. 一般使用hashMap对象来管理音频对象。在工程res文件夹中增加raw文件夹,将sound2音频文件复制到该文件夹。
soundMap = new HashMap<Integer, Integer>();
soundMap.put(1, soundPool.load(this,R.raw.sound2 , 1));
3.播放,现在可以使用play播放了,返回的id为streamID,在pause中可以使用这个变量来暂停播放音频。
id = soundPool.play(soundMap.get(1), 1, 1, 1, 0, 1);
4.暂停
soundPool.pause(id);
三.使用mediaplayer播放音乐
mediaplayer与soundPool不同,其播放的音乐一般较长,如游戏的背景音乐,能够播放的音频文件没有容量的限制,但是在同一时刻同一mediaplayer只能够播放一个音频。
相关方法:
MediaPlayer android.media.MediaPlayer.create(Context context, int resid)
context:承接上下文,一般为this
resid:资源id
MediaPlayer.start(); 播放音频文件。
mediaPlayer.pause(); 停止播放音频文件
使用步骤:
1.mediaplayer的定义和实例化。
MediaPlayer mediaPlayer;
其中我已事先将test文件放到res的raw文件夹中,如果没有这个文件夹,可以自己创建一个。
mediaPlayer = MediaPlayer.create(this, R.raw.test);
2.播放
mediaPlayer.start();
四.注意事项
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
// TODO Auto-generated method stub
isReady = 1; //只有isReady ==1的时候才能播放音频
}
});
2. play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate); 中的优先级要在0-9的区间之内,否则播放会有问题,