Hello friends, today i am going to post of Video recording in Android using surface view.
activity_main.xml:
Download full source code from here VideoRecorderSampleCode
RecordVideoActivity.class
import java.io.File;
import java.io.IOException;
import java.util.Date;
import
android.app.Activity;
import
android.hardware.Camera;
import
android.hardware.Camera.Parameters;
import
android.media.MediaRecorder;
import android.os.Bundle;
import
android.os.Environment;
import android.util.Log;
import
android.view.MenuItem;
import
android.view.SurfaceHolder;
import
android.view.SurfaceHolder.Callback;
import android.view.Menu;
import
android.view.SurfaceView;
import android.widget.Toast;
public class RecordVideoActivity extends Activity implements Callback
{
@Override
protected void onDestroy()
{
stopRecording();
super.onDestroy();
}
private SurfaceHolder surfaceHolder;
private SurfaceView surfaceView;
public MediaRecorder mrec = new
MediaRecorder();
private Camera mCamera;
@Override
public void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView)
findViewById(R.id.surface_camera);
mCamera = Camera.open();
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public boolean
onCreateOptionsMenu(Menu menu)
{
menu.add(0, 0, 0, "Start");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean
onOptionsItemSelected(MenuItem item)
{
if(item.getTitle().equals("Start"))
{
try {
startRecording();
item.setTitle("Stop");
} catch (Exception e) {
String message =
e.getMessage();
Log.i(null, "Problem
" +
message);
mrec.release();
}
}
else if(item.getTitle().equals("Stop"))
{
mrec.stop();
mrec.release();
mrec = null;
item.setTitle("Start");
}
return super.onOptionsItemSelected(item);
}
protected void startRecording() throws IOException
{
if(mCamera==null)
mCamera = Camera.open();
String filename;
String path;
path= Environment.getExternalStorageDirectory().getAbsolutePath().toString();
Date date=new Date();
filename="/rec"+date.toString().replace(" ", "_").replace(":", "_")+".mp4";
//create empty file it must use
File file=new File(path,filename);
mrec = new MediaRecorder();
mCamera.lock();
mCamera.unlock();
//
Please maintain sequence of following code.
//
If you change sequence it will not work.
mrec.setCamera(mCamera);
mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mrec.setPreviewDisplay(surfaceHolder.getSurface());
mrec.setOutputFile(path+filename);
mrec.prepare();
mrec.start();
}
protected void stopRecording() {
if(mrec!=null)
{
mrec.stop();
mrec.release();
mCamera.release();
mCamera.lock();
}
}
private void releaseMediaRecorder()
{
if (mrec != null) {
mrec.reset(); // clear recorder configuration
mrec.release(); // release the recorder object
}
}
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);
Log.i("Surface", "Created");
}
else {
Toast.makeText(getApplicationContext(),
"Camera
not available!",
Toast.LENGTH_LONG).show();
finish();
}
}
@Override
public void
surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
}
}
<SurfaceView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/surface_camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:layout_weight="1" >
</SurfaceView>
Permissions:
<uses-permission android:name="android.permission.CAMERA"
/>
<uses-permission android:name="android.permission.RECORD_AUDIO"
/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
Download full source code from here VideoRecorderSampleCode
I will be happy if you will provide your feedback or follow this blog. Any suggestion and help will be appreciated. Thank you :)
I followed your code though, when i run it, the application suddenly stopped with the pop-up message which is " Unfortunately, application has stopped".
ReplyDeleteplease give me some advice
Please send me log cat error.
Delete03-27 18:29:14.426: E/AndroidRuntime(29312): Caused by: java.lang.IllegalStateException
Delete03-27 18:29:14.426: E/AndroidRuntime(29312): at android.media.MediaRecorder.stop(Native Method)
03-27 18:29:14.426: E/AndroidRuntime(29312): at com.example.app.MainActivity.stopRecording(MainActivity.java:129)
can't able to download samples
ReplyDeletePlease try below link:
Deletehttps://sites.google.com/site/hasmukhandroidcom/home/androidtutorial/A_V_Record_Demo_App.zip?attredirects=0&d=1
Nice post! totally works
ReplyDeleteHi, Thank you for example, Can we set orientation for camera? because its not perfectly displayed in this code. Please help me buddy.
ReplyDeleteYou just copy paste the above code. where did you used releaseCamera() and releaseMediaRecorder() method??
ReplyDelete