Android中视频播放可以参照音频的播放,同样是用到MediaPlayer这个类,以及有关摄像头操作的SurfaceView组件,布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
</LinearLayout>
布局文件不用过多解释,现在来看VideoActivity.java中的代码
public class VideoActivity extends Activity {
private EditText txt_name;
private ImageButton btn_play;
private ImageButton btn_pause;
private ImageButton btn_reset;
private ImageButton btn_stop;
private String fileName;
private SurfaceView surfaceView;
private MediaPlayer mediaPlayer;
private int position;
}
if(position>0){
try {
play();
mediaPlayer.seekTo(position);
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
}
});
public void onClick(View v) {
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//如果SD卡不存在,则返回
Toast.makeText(VideoActivity.this, R.string.sdcarderror, 1);
return;
}
fileName = txt_name.getText().toString();
ImageButton button = (ImageButton)v;
try {
switch(v.getId()){
case R.id.btn_play:
play();
case R.id.btn_pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else{
mediaPlayer.start();
}
break;
case R.id.btn_reset:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
play();
}
break;
case R.id.btn_stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
private void play() throws IOException {
mediaPlayer.reset();//重置为初始状态
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.setDataSource(videoFile.getAbsolutePath());
mediaPlayer.prepare();//缓冲
mediaPlayer.start();//播放
}
}