Grabación de video con grabadora de medios

Estoy escribiendo código para la función de grabación de video con la grabadora de medios., Pero arroja Excepción Io, Excepción de estado ilegal. Busqué muchas veces en google pero no hay una explicación adecuada para este. Mi código es

public class Simple extends Activity {
    /** Called when the activity is first created. */
    Button button,button2;
    MediaRecorder recorder;
    Camera camera;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button=(Button) findViewById(R.id.button1);
        button2=(Button) findViewById(R.id.button2);

    camera=Camera.open();
    Camera.Parameters params = camera.getParameters();
    camera.setParameters(params);


    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            Toast.makeText(getBaseContext(), "Video Start", Toast.LENGTH_LONG).show();

            String mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mFileName += "/temp.3mp4";

            recorder=new MediaRecorder();


            recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            recorder.setVideoFrameRate(10);
            recorder.setVideoSize(200, 300);
            recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
            recorder.setMaxDuration(50000);
            recorder.setMaxFileSize(5000000);
            recorder.setOutputFile(mFileName);
            try {
                recorder.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(getBaseContext(),e.toString(), Toast.LENGTH_LONG).show();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(getBaseContext(),e.toString(), Toast.LENGTH_LONG).show();
            }
            }
    });

    button2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), "Video Stop", Toast.LENGTH_LONG).show();
            recorder.stop();
        }
    });

}

}

Respuestas a la pregunta(1)

Su respuesta a la pregunta