Hi,
I need to create a video recorder application. In this case the current speed taken from GPS and other set of icons need to be shown in the video preview. Is this possible? I saw similar app "aLapRecorder" in the market place. I would be thankful if any one can share a source code or method to achieve this requirement.
- Thanks
This is the code I have try to Up to now:
package com.tcs.video;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
public class VideoRecorder extends Activity{
private MediaRecorder recorder;
private Preview mPreview;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean flag=false;
boolean startedRecording=false;
boolean stoppedRecording=false;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try{
recorder = new MediaRecorder();
mPreview = new Preview(this, recorder);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(mPreview);
}
catch (Exception e) {
Log.v("onCreate", "Message:"+e.getMessage());
Toast _display = Toast.makeText(this, "onCreate:"+e.getMessage(), Toast.LENGTH_SHORT);
_display.show();
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
menu.clear();
menu.add(0, 0, 0, "Start Recording");
menu.add(1, 1, 0, "Stop Recording");
menu.setGroupVisible(0, false);
menu.setGroupVisible(1, false);
if(startedRecording==false)
menu.setGroupVisible(0, true);
else if(startedRecording==true&&stoppedRecording==false)
menu.setGroupVisible(1, true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case 0:
recorder.start();
startedRecording=true;
break;
case 1:
recorder.stop();
recorder.release();
recorder = null;
stoppedRecording=true;
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
class Preview extends SurfaceView implements SurfaceHolder.Callback
{
SurfaceHolder mHolder;
MediaRecorder tempRecorder;
Context _context;
public Preview(Context context,MediaRecorder recorder) {
super(context);
_context = context;
tempRecorder=recorder;
try{
mHolder=getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
catch (Exception e) {
Log.v("Preview Const 3", "Message:"+e.getMessage());
Toast _display = Toast.makeText(_context, "Preview Const 3:"+e.getMessage(), Toast.LENGTH_SHORT);
_display.show();
}
}
@Override
public SurfaceHolder getHolder() {
return super.getHolder();
}
public Surface getSurface()
{
return mHolder.getSurface();
}
public void surfaceCreated(SurfaceHolder holder){
try{
tempRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
tempRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
tempRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
tempRecorder.setVideoFrameRate(15);
Display display = getWindowManager().getDefaultDisplay();
int width =display.getWidth();
int height =display.getHeight();
tempRecorder.setVideoSize(width, height);
tempRecorder.setOutputFile("/sdcard/recordvideooutput.3gp");
tempRecorder.setPreviewDisplay(mHolder.getSurface());
boolean isprepared = false;
tempRecorder.prepare();
isprepared = true;
} catch (Exception e) {
Log.v("surfaceCreated", "Message:"+e.getMessage());
Toast _display = Toast.makeText(_context, "surfaceCreated:"+e.getMessage(), Toast.LENGTH_SHORT);
_display.show();
}
}
public void surfaceDestroyed(SurfaceHolder holder)
{
try{
if(tempRecorder!=null)
{
tempRecorder.release();
tempRecorder = null;
}
}
catch (Exception e) {
Log.v("surfaceDestroyed", "Message:"+e.getMessage());
Toast _display = Toast.makeText(_context, "surfaceDestroyed:"+e.getMessage(), Toast.LENGTH_SHORT);
_display.show();
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
}
}
}