Hi first thank you for read this Thread
I want make video record App
first seeing camera preview with Camera(Device camera) and record
start User interaction(MediaRecorder)
but Camera.setPreviewDisplay(surfaceholder) and
MediaRecorder.setPreviewDisplay(surfaceholder) crash
i attached setPreviewDisplay in surfacechange: in devicecamera
and When user pushed record start buttn in activity start recording
but it didnt work just Exception in startRecord();
just generated empty file my given name
Thank you have a nice day;
Here is my code------------------------------------------------------
package com.test.camera.Preview
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.Context;
import android.os.*;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.FrameLayout;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.media.MediaRecorder;
import android.media.CamcorderProfile;
import android.media.CameraProfile;
public class CameraOverlay {
Context mContext;
private SurfaceView mCameraPreview;
private SurfaceHolder mSurfaceHolder;
private Camera mCameraDevice;
private MediaRecorder mRecorder;
private OnCameraStateChangeListener mStatusListener;
/**
*
*/
public CameraOverlay(Context context){
mContext = context;
mCameraPreview = new SurfaceView(mContext);
mSurfaceHolder = mCameraPreview.getHolder();
mSurfaceHolder.addCallback(getSurfaceHolderCallback());
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
/**
*
*/
public void startRecord(){
if(mRecorder != null){
stopRecord();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Debug.log("startRecord:"+e.getMessage());
}
}
SimpleDateFormat formatter = new SimpleDateFormat
( "yyyyMMddHHmmss");
Date currentTime = new Date ( );
String _szFile = String.format("/sdcard/test/
%s.mp4",formatter.format ( currentTime ));
mRecorder = new MediaRecorder();
mCameraDevice.unlock();
mRecorder.setCamera(mCameraDevice);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setVideoFrameRate(15);
mRecorder.setVideoSize(176,144);
mRecorder.setMaxDuration(1000*10);
mRecorder.setMaxFileSize(1024*3000);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try{
mCameraDevice.setPreviewDisplay(null);
mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mRecorder.setOutputFile(_szFile);
mRecorder.prepare();
Thread.sleep(1000);
mRecorder.start(); <<< not work just sound pong and generate
empty file
}catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Debug.log("IllegalStateException:::"+_szFile+" :
"+e.getMessage()
+":"+e.getLocalizedMessage());
}catch (IOException e) {
Debug.log("IOException:::"+_szFile+" : "+e.getMessage()
+":"+e.getLocalizedMessage());
}catch(Exception error){
Debug.log("Exception:::"+_szFile+" : "+error.getMessage()
+":"+error.getLocalizedMessage());
}
}
/**
*
*/
public void stopRecord(){
if(mRecorder != null){
mRecorder.reset();
mRecorder.release();
mRecorder = null;
mCameraDevice.lock();
}
}
/**
*
* @return
*/
public SurfaceHolder.Callback getSurfaceHolderCallback() {
return new SurfaceHolder.Callback() {
/**
*
*/
public void surfaceCreated(SurfaceHolder holder) {
Debug.log("surfaceCreated");
try {
mCameraDevice = Camera.open();
mCameraDevice.setPreviewDisplay(holder);
}catch (IOException e) {
mCameraDevice.release();
mCameraDevice = null;
e.printStackTrace();
Debug.log("surfaceCreated:"+e.getMessage());
}catch (RuntimeException e) {
mCameraDevice.release();
mCameraDevice = null;
e.printStackTrace();
Debug.log("surfaceCreated:"+e.getMessage());
}
mStatusListener.onOpenCamera();
}
/**
*
*/
public void surfaceChanged(SurfaceHolder holder, int
format, int width, int height) {
if(mCameraDevice != null) {
Parameters _param =
mCameraDevice.getParameters();
Camera.Size _camSize =
_param.getSupportedPreviewSizes().get(0);
_param.setPreviewSize(_camSize.width,_camSize.height);
mCameraDevice.setParameters(_param);
mCameraDevice.startPreview();
Debug.log("surfaceChanged");
} else {
// Maybe OutOfMemory
Debug.log("surfaceChanged : outofmemory");
}
mStatusListener.onCameraChange();
}
/**
*
*/
public void surfaceDestroyed(SurfaceHolder holder) {
stopRecord();
Debug.log("surfaceDestroyed");
if(mCameraDevice != null) {
mCameraDevice.stopPreview();
mCameraDevice.release();
mCameraDevice = null;
Debug.log("surfaceDestroyed OK");
}else{
Debug.log("surfaceDestroyed : ??");
}
mStatusListener.onCameraDestroy();
}
};
}
/**
*
* @return
*/
public FrameLayout getDeviceCameraView(){
FrameLayout layout = new FrameLayout(mContext);
layout.addView(mCameraPreview);
return layout;
}
/**
*
* @author kage
*
*/
public interface OnCameraStateChangeListener{
public void onOpenCamera();
public void onCameraChange();
public void onCameraDestroy();
}
public void setCameraStatusListener(OnCameraStateChangeListener l)
{mStatusListener = l;}
}
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en