【发布时间】:2014-01-24 12:54:33
【问题描述】:
我想在前后摄像头之间切换来录制视频。 这是我的代码:
public void surfaceCreated(SurfaceHolder holder) {
if (usecamera) {
camera = Camera.open(0);
camera.setDisplayOrientation(90);
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
previewRunning = true;
}
catch (IOException e) {
Log.e(LOGTAG,e.getMessage());
e.printStackTrace();
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (!recording && usecamera) {
if (previewRunning){
camera.stopPreview();
}
try {
Camera.Parameters p = camera.getParameters();
p.setPreviewSize(camcorderProfile.videoFrameWidth, camcorderProfile.videoFrameHeight);
camera.setParameters(p);
camera.setPreviewDisplay(holder);
camera.startPreview();
previewRunning = true;
}
catch (IOException e) {
Log.e(LOGTAG,e.getMessage());
e.printStackTrace();
}
prepareRecorder();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
if (recording) {
recorder.stop();
recording = false;
}
recorder.release();
if (usecamera) {
previewRunning = false;
//camera.lock();
camera.release();
}
}
在第一种情况下,后置摄像头的预览是正确的,但是当我尝试更换摄像头时崩溃:
更改按钮是:
changeCamera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (Camera.getNumberOfCameras()>=2) {
camera.stopPreview();
camera.release();
//"which" is just an integer flag
switch (which) {
case 0:
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
which = 1;
break;
case 1:
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
which = 0;
break;
}
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException exception) {
camera.release();
camera = null;
}
}
}
});
【问题讨论】:
-
请将您在 logcat 中看到的消息发布。可能不仅有你应用的异常堆栈,还有来自相机服务的一些错误消息。
标签: android video android-camera surfaceview record