title: Record Video from Camera via Version Android 2.2
body: <p><code>enter code here</code>When I try to recording video from camera at version Android 2.2. It has some errors.No one could find the solution. İs there any bug Android MediaRecorder API. How can I solve this. 
  I got more errors.You can see some of them in picture.
  And an error like that:<strong>Camera Preview -13</strong> 
  Thanks a lot.</p>
  
  <p><a href="http://i.stack.imgur.com/72lp7.png" rel="nofollow">http://i.stack.imgur.com/72lp7.png</a>
  recorder.prepare() fails and throws Java.lang.illegalexeption
  Here is Code:</p>
  
  <pre><code>package app.raceway.com;
  
  import java.io.File;
  import java.io.IOException;
  
  import android.app.Activity;
  import android.content.pm.ActivityInfo;
  import android.hardware.Camera;
  import android.media.CamcorderProfile;
  import android.media.MediaRecorder;
  import android.os.Bundle;
  import android.os.Environment;
  import android.util.Log;
  import android.view.SurfaceHolder;
  import android.view.SurfaceView;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.view.Window;
  import android.view.WindowManager;
  import android.widget.Toast;
  
  public class VideoCapture extends Activity implements  SurfaceHolder.Callback {
      MediaRecorder recorder;
      SurfaceHolder holder;
      public Camera camera;
      File video;
      String filePath;
      boolean recording = false;
        private static final int FRAME_RATE = 15;
  
        private static final int CIF_WIDTH = 320;
  
        private static final int CIF_HEIGHT = 240;
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  
  
      recorder = new MediaRecorder();
  
      setContentView(R.layout.main);
  
      SurfaceView cameraView = (SurfaceView) findViewById(R.id.cameraView);
      holder = cameraView.getHolder();
      holder.addCallback(this);
      holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  
      String path=Environment.getExternalStorageDirectory().getAbsolutePath()+
      "/video/videocapture_example.mpg4";
      // make sure the directory we plan to store the recording in exists
      File sampleDir = Environment.getExternalStorageDirectory();
      try { 
          video = new File(sampleDir+"/videofile.3gp");
          sampleDir.createNewFile();
            //video = File.createTempFile("videofile", ".3gp", sampleDir);
        } 
        catch (IOException e)
        {
            Log.e("deneme","sdcard access error");
  
        }
        filePath=video.getAbsolutePath();
  
  }
  
  private void initRecorder() {
  
      recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  
  }
  private void prepareRecorder() throws IOException{
      recorder.setCamera(camera);
      recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
      recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
      recorder.setOutputFile(filePath);
      recorder.setMaxDuration(50000); // 50 seconds
      recorder.setMaxFileSize(5000000); // Approximately 5 megabytes
  try {
  
  } catch (IllegalStateException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
  }
  
  
  }
  
  
  
  public void onclickSaveVideo(View v) throws IOException {
      if (recording) {
      Toast t=new Toast(getApplicationContext());
      t.makeText(getApplicationContext(), "Video Recording stopped",Toast.LENGTH_SHORT);
      t.show();
          recorder.stop();
          recording = false;
  
          // Let's initRecorder so we can record again
          initRecorder();     
      } else {
          try {
              prepareRecorder();
              //recorder.prepare();
          } catch (IllegalStateException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          recording = true;
          recorder.prepare();
          recorder.start();
          try {
              Thread.sleep(10000);
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          recorder.stop();
          Toast t=new Toast(getApplicationContext());
          t.makeText(getApplicationContext(), "Video Recording started",Toast.LENGTH_SHORT);
          t.show();
      }
  }
  @Override
  public void surfaceCreated(SurfaceHolder holder) {
      camera=Camera.open();
  
      try {
          camera.setPreviewDisplay(holder);
      } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
      }
      camera.startPreview();
      camera.unlock();
  }
  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
  
  }
  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
      if (recording) {
          recorder.stop();
          recording = false;
      }
      recorder.release();
      finish();
      camera.release();
  }
  
  
  }
  </code></pre>