I am working on video recording app in which i want to display preview and when user click on record button it start recording and when user click stop button it stop recording.
I got video preview on my surface but when i press start button it crash with error "MEDIA.RECORDER.START(Native MEthod). Here is my code Please help me guys.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView = (SurfaceView) findViewById(R.id.surface_camera); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Button start =(Button)findViewById(R.id.start); Button stop =(Button)findViewById(R.id.stop); stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub camera.stopPreview(); stopRecording(); } }); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startRecording(); } }); } @Override public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(); if (camera != null){ Camera.Parameters params = camera.getParameters(); camera.setParameters(params); } else { Toast.makeText(getApplicationContext(), "Camera not available!", Toast.LENGTH_LONG).show(); finish(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (previewRunning){ camera.stopPreview(); } Camera.Parameters p = camera.getParameters(); List<Camera.Size> sizes = p.getSupportedPreviewSizes(); Camera.Size cs = sizes.get(0); p.setPreviewSize(cs.width, cs.height); camera.setParameters(p); try { camera.setPreviewDisplay(holder); camera.startPreview(); previewRunning = true; } catch (IOException e) { Log.e(TAG,e.getMessage()); e.printStackTrace(); } } private MediaRecorder mediaRecorder; private final int maxDurationInMs = 20000; private final long maxFileSizeInBytes = 500000; private final int videoFramesPerSecond = 20; public boolean startRecording(){ try { camera.unlock(); mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mediaRecorder.setMaxDuration(maxDurationInMs); File tempFile = new File(getCacheDir(),"test.mp4"); mediaRecorder.setOutputFile(tempFile.getPath()); mediaRecorder.setVideoFrameRate(videoFramesPerSecond); mediaRecorder.setVideoSize(surfaceView.getWidth(), surfaceView.getHeight()); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); mediaRecorder.setMaxFileSize(maxFileSizeInBytes); mediaRecorder.prepare(); mediaRecorder.start(); return true; } catch (IllegalStateException e) { Log.e(TAG,e.getMessage()); e.printStackTrace(); return false; } catch (IOException e) { Log.e(TAG,e.getMessage()); e.printStackTrace(); return false; } } public void stopRecording(){ mediaRecorder.stop(); camera.lock(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); previewRunning = false; camera.release(); }
}
Log is
08-31 02:20:11.781: E/MediaRecorder(14519): start failed: -19 08-31 02:20:11.781: D/AndroidRuntime(14519): Shutting down VM 08-31 02:20:11.781: W/dalvikvm(14519): threadid=1: thread exiting with uncaught exception (group=0x416c9700) 08-31 02:20:11.781: E/AndroidRuntime(14519): FATAL EXCEPTION: main 08-31 02:20:11.781: E/AndroidRuntime(14519): java.lang.RuntimeException: start failed. 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.media.MediaRecorder.start(Native Method) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.example.cameratest.MainActivity.startRecording(MainActivity.java:135) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.example.cameratest.MainActivity$2.onClick(MainActivity.java:61) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.view.View.performClick(View.java:4240) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.view.View$PerformClick.run(View.java:17721) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.os.Handler.handleCallback(Handler.java:730) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.os.Handler.dispatchMessage(Handler.java:92) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.os.Looper.loop(Looper.java:137) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.app.ActivityThread.main(ActivityThread.java:5103) 08-31 02:20:11.781: E/AndroidRuntime(14519): at java.lang.reflect.Method.invokeNative(Native Method) 08-31 02:20:11.781: E/AndroidRuntime(14519): at java.lang.reflect.Method.invoke(Method.java:525) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-31 02:20:11.781: E/AndroidRuntime(14519): at dalvik.system.NativeStart.main(Native Method)