1,打开摄像头
/**
* 打开摄像头
* @param fore
* @return
*/
public synchronized boolean openCamera(boolean fore) {
try {
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.FROYO || ("gt-i9003").equals(Build.MODEL.replaceAll(" ", "").toLowerCase())) {
showToast("ninisha");
return false;
}
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
int count = Camera.getNumberOfCameras();
if (count <= 0) {
showToast("woshishui");
return false;
}
int index = -1;
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
index = 1;
} else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
index = 0;
}
// �������ͷ��״̬���رպ��л�
if (camera != null) {
closeCamera();
}
camera = Camera.open(index);
if (camera == null) {
return false;
}
adjustPreviewSize();
camera.setPreviewDisplay(surfaceView.getHolder());
camera.startPreview();
} catch (Exception e) {
showToast("exception");
e.printStackTrace();
return false;
}
return true;
}
2,开始录制
/**
* 开始录制
* @return
*/
public boolean startRecordCamera() {
if (mediaRecorder == null) {
mediaRecorder = new MediaRecorder();
}
try {
camera.stopPreview();
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// mediaRecorder.setVideoEncodingBitRate(480000);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// mediaRecorder.setVideoFrameRate(25);
mediaRecorder.setVideoSize(640, 480);
File f = new File(rootPath);
if (!f.isDirectory()) {
if (f.exists()) {
f.delete();
}
f.mkdirs();
}
f = new File(recordPath);
if (f.exists()) {
f.delete();
}
f.createNewFile();
mediaRecorder.setOutputFile(f.getAbsolutePath());
mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
mediaRecorder.prepare();
mediaRecorder.start();
isRecording = true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
3,视频录制结束
/**
* 视频录制结束
*/
protected void stopRecrod() {
if (isRecording) {
if (camera != null) {
camera.lock();
}
if (mediaRecorder != null) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
}
}
4,视屏预览
MediaPlayer mediaPlayer;
private void preView() {
if (mediaPlayer == null ) {
mediaPlayer = new MediaPlayer();
} else {
mediaPlayer.reset();
}
try {
mediaPlayer.setDataSource(recordPath);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});
mediaPlayer.setDisplay(surface2.getHolder());
mediaPlayer.prepareAsync();
//mediaPlayer.start();
}
细节处理:点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.open:
if (openCamera(false)) {
isOpenCamera = true;
} else {
isOpenCamera = false;
}
break;
case R.id.record:
if (isOpenCamera) {
startRecordCamera();
Log.e("xyz", "打开录制");
}
break;
case R.id.stop:
stopRecrod();
Log.e("xyz", "结束录制");
Log.e("xyz", "recordPath"+recordPath);
break;
case R.id.preview://预览
File file = new File(recordPath);
if (file.exists()) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer =null;
}
} else{
preView();
}
} else {
Toast.makeText(this, "file isnot exist ,record failed", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
demo下载地址:http://download.csdn.net/detail/qq_20967339/9599266