[英]How I can have previewing permanently when capture video for android?
I am writing a video capture app for android. 我正在为Android编写视频捕获应用程序。 I have preview first time I want to capture.
我想捕捉时第一次预览。 But after I press stop, I no longer get preview when I start recording again.
但是当我按停止后,当我再次开始录制时,我将不再获得预览。 How can I have preview option permanently?
如何永久拥有预览选项?
protected void startRecording() throws IOException
{
String state = android.os.Environment.getExternalStorageState();
if (!state.equals(android.os.Environment.MEDIA_MOUNTED))
{
throw new IOException("SD Card is not mounted. It is " + state + ".");
}
// make sure the directory we plan to store the recording in exists
File directory = new File(this.Videopath).getParentFile();
if (!directory.exists() && !directory.mkdirs())
{
throw new IOException("Path to file could not be created.");
}
mCamera.stopPreview();
mCamera.unlock();
mrec = new MediaRecorder(); // Works well
mrec.setCamera(mCamera);
mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mrec.setOutputFile(Videopath);
mrec.setPreviewDisplay(surfaceHolder.getSurface());
mrec.prepare();
isRecording=true;
mrec.start();
}
//-------------------------------------------------------------
protected void stopRecording()
{
if(mrec !=null)
mrec.stop();
releaseMediaRecorder();
isRecording=false;
}
//-------------------------------------------------------------
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)
{
try {
mCamera .setPreviewDisplay(holder);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera .startPreview();
}
//-------------------------------------------------------------
@Override
public void surfaceCreated(SurfaceHolder holder)
{
if (mCamera != null)
{
Parameters params = mCamera.getParameters();
mCamera.setParameters(params);
mCamera.setDisplayOrientation(90);
try {
mCamera .setPreviewDisplay(holder);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera .startPreview();
}
else
{
Toast.makeText(getApplicationContext(), "Camera not available!", Toast.LENGTH_LONG).show();
VideoRecorderActivity.this.finish();
}
}
//-------------------------------------------------------------
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
}
After you press stop recording either you can play the recorded video or if you want to restart your preview then in your stoprecording method do this: 在按下停止录制后,您可以播放录制的视频,或者如果您想重新开始预览,则可以在停止录制方法中执行以下操作:
protected void stopRecording()
{
if(mrec !=null)
try{
mrec.stop();
}catch(IllegalStateException e)
{
Log.e(TAG,"Got illegal ");
}
releaseRecorder();
releaseCamera();
isRecording=false;
/*Here do the same process which you do while creating the preview i.e initilize the camera and create the preview */
mCamera = Camera.open();
camera.lock();
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
try{
mCamera .setPreviewDisplay(holder);
mCamera .startPreview();
}catch(IOException e)
{
Log.v(TAG,"could not start the preview ");
e.printStackTrace();
}
}
// release the recorder after recording
private void releaseRecorder() {
if( mrec!=null){
Log.v(TAG, "recorder released");
mrec.release();
mrec=null;
}
}
// release the camera after recording
private void releaseCamera() {
if(mcamera!=null){
try{
mcamera.reconnect();
}catch(IOException e){
e.printStackTrace();
}
Log.v(TAG, "camera released");
mcamera.release();
mcamera=null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.