简体   繁体   English

捕获Android视频时,如何进行永久预览?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM