아래와같은 코드로하면
클릭시 surfaceview로 동영상이 나오면서
다시 클릭하면 특정한 폴더에 영상 저장이됩니다.
그런데 제가 원하는건 한번더 클릭하면 새로운 영상이 찍히는것인데요..
mediarecorder.start()부분에서 에러가 나면서안됩니다...
catch문에서 로그찍힌거보면 java.lang.RuntimeException: start failed. 이거네요 ㅜㅠ
뭘까요...
전체코드는 아래와같습니다. (8000자 제한때문에 오버라이드 하는부분이나...permission부분 생략했습니다.)
진짜 전체코드는 지식인 링크
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040104&docId=271467218
참고부탁드립니다.(그대로 복붙해도 작동할겁니다.)
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private MediaRecorder mMediaRecorder;
private Camera mCamera;
private SurfaceView mSurfaceView;
private SurfaceHolder mHolder;
private View mToggleButton;
private boolean mInitSuccesful;
private boolean is_recording;
private SurfaceHolder.Callback context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
checkPermission();//checkpermission 부분 생략합니다. 글자수제한;;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mSurfaceView = (SurfaceView) findViewById(R.id.preview);
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mToggleButton = (ToggleButton) findViewById(R.id.toggleRecordingButton);
mToggleButton.setOnClickListener(new View.OnClickListener() {
@Override
// toggle video recording
public void onClick(View v) {
if(is_recording){
Log.e("error","중지클릭됨");
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder=null;
is_recording=false;
} else {
Log.e("error","눌림");
//일단 initRecorder 이후에 start가 이뤄져야함.
if (mMediaRecorder == null) {
Log.e("error","null");
mMediaRecorder = new MediaRecorder();
}
try {
initRecorder(mHolder.getSurface());
} catch (IOException e) {
e.printStackTrace();
}
try {
mMediaRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mMediaRecorder.start();
} catch (Throwable e) {
e.printStackTrace();
Log.e("error", "errrrr"+e+"");
}
is_recording=true;
}
}
});
}
private static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"MyCameraApp");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
Log.e("error",mediaStorageDir.getPath());
return mediaFile;
}
private void initRecorder(Surface surface) throws IOException {
if (mCamera == null) {
mCamera = Camera.open();
mCamera.unlock();
}
// mCamera.setDisplayOrientation(90);
mMediaRecorder.setPreviewDisplay(surface);
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
// mMediaRecorder.setOutputFormat(8);
//mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setVideoFrameRate(30);
//mMediaRecorder.setVideoSize(640, 480);
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"MyCameraApp");
mMediaRecorder.setOutputFile(mediaStorageDir.getPath()+"/kkkhh.mp4");
}
}