How can I record a video in my Android app? How can I record a video in my Android app? android android

How can I record a video in my Android app?


Here is a simple video recording example using the MediaRecorder:

public class VideoCapture extends Activity implements OnClickListener, SurfaceHolder.Callback {    MediaRecorder recorder;    SurfaceHolder holder;    boolean recording = false;    @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();        initRecorder();        setContentView(R.layout.main);        SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView);        holder = cameraView.getHolder();        holder.addCallback(this);        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        cameraView.setClickable(true);        cameraView.setOnClickListener(this);    }    private void initRecorder() {        recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);        recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);        CamcorderProfile cpHigh = CamcorderProfile                .get(CamcorderProfile.QUALITY_HIGH);        recorder.setProfile(cpHigh);        recorder.setOutputFile("/sdcard/videocapture_example.mp4");        recorder.setMaxDuration(50000); // 50 seconds        recorder.setMaxFileSize(5000000); // Approximately 5 megabytes    }    private void prepareRecorder() {        recorder.setPreviewDisplay(holder.getSurface());        try {            recorder.prepare();        } catch (IllegalStateException e) {            e.printStackTrace();            finish();        } catch (IOException e) {            e.printStackTrace();            finish();        }    }    public void onClick(View v) {        if (recording) {            recorder.stop();            recording = false;            // Let's initRecorder so we can record again            initRecorder();            prepareRecorder();        } else {            recording = true;            recorder.start();        }    }    public void surfaceCreated(SurfaceHolder holder) {        prepareRecorder();    }    public void surfaceChanged(SurfaceHolder holder, int format, int width,            int height) {    }    public void surfaceDestroyed(SurfaceHolder holder) {        if (recording) {            recorder.stop();            recording = false;        }        recorder.release();        finish();    }}

It's from my book: Pro Android Media: Developing Graphics, Music, Video, and Rich Media Apps for Smartphones and Tablets

Also, do not forget to include these permissions in manifest:

<uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


Here is another example which is working

public class EnregistrementVideoStackActivity extends Activity implements SurfaceHolder.Callback {    private SurfaceHolder surfaceHolder;    private SurfaceView surfaceView;    public MediaRecorder mrec = new MediaRecorder();    private Button startRecording = null;    File video;    private Camera mCamera;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.camera_surface);        Log.i(null , "Video starting");        startRecording = (Button)findViewById(R.id.buttonstart);        mCamera = Camera.open();        surfaceView = (SurfaceView) findViewById(R.id.surface_camera);        surfaceHolder = surfaceView.getHolder();        surfaceHolder.addCallback(this);        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    }    @Override    public boolean onCreateOptionsMenu(Menu menu)    {        menu.add(0, 0, 0, "StartRecording");        menu.add(0, 1, 0, "StopRecording");        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item)    {        switch (item.getItemId())        {        case 0:            try {                startRecording();            } catch (Exception e) {                String message = e.getMessage();                Log.i(null, "Problem Start"+message);                mrec.release();            }            break;        case 1: //GoToAllNotes            mrec.stop();            mrec.release();            mrec = null;            break;        default:            break;        }        return super.onOptionsItemSelected(item);    }    protected void startRecording() throws IOException     {        mrec = new MediaRecorder();  // Works well        mCamera.unlock();        mrec.setCamera(mCamera);        mrec.setPreviewDisplay(surfaceHolder.getSurface());        mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);        mrec.setAudioSource(MediaRecorder.AudioSource.MIC);         mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));        mrec.setPreviewDisplay(surfaceHolder.getSurface());        mrec.setOutputFile("/sdcard/zzzz.3gp");         mrec.prepare();        mrec.start();    }    protected void stopRecording() {        mrec.stop();        mrec.release();        mCamera.release();    }    private void releaseMediaRecorder(){        if (mrec != null) {            mrec.reset();   // clear recorder configuration            mrec.release(); // release the recorder object            mrec = null;            mCamera.lock();           // lock camera for later use        }    }    private void releaseCamera(){        if (mCamera != null){            mCamera.release();        // release the camera for other applications            mCamera = null;        }    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width,            int height) {    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        if (mCamera != null){            Parameters params = mCamera.getParameters();            mCamera.setParameters(params);        }        else {            Toast.makeText(getApplicationContext(), "Camera not available!", Toast.LENGTH_LONG).show();            finish();        }    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        mCamera.stopPreview();        mCamera.release();    }}

camera_surface.xml

<?xml version="1.0" encoding="UTF-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><SurfaceView    android:id="@+id/surface_camera"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_weight="1" /><Button    android:id="@+id/buttonstart"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:background="@drawable/record_start" /></RelativeLayout>

And of course include these permission in manifest:

<uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


You record audio and video using the same MediaRecorder class. It's pretty simple.Here's an example.