怎样才可以有previewing永久时为Android捕获视频?才可以、视频、previewing、Android

由网友(你别来我无恙)分享简介:我写为Android视频捕获应用程序。我有preVIEW我第一次想捕捉。但经过我preSS停止,我不再获得preVIEW当我再次开始拍摄。怎样才可以有preVIEW选项永久? 保护无效的startRecording()抛出IOException异常{字符串状态= android.os.Environment.getEx...

我写为Android视频捕获应用程序。我有preVIEW我第一次想捕捉。但经过我preSS停止,我不再获得preVIEW当我再次开始拍摄。怎样才可以有preVIEW选项永久?

 保护无效的startRecording()抛出IOException异常{字符串状态= android.os.Environment.getExternalStorageState();如果(!state.equals(android.os.Environment.MEDIA_MOUNTED)){    抛出新IOException异常(SD卡未安装它。+状态+。);}//确保目录,我们计划存储在记录存在文件目录=新的文件(this.Videopath).getParentFile();如果(directory.exists()及!&放大器;!directory.mkdirs()){    抛出新IOException异常(路径文件无法被创建。);} mCamera.stop preVIEW(); mCamera.unlock(); MREC =新MediaRecorder(); // 效果很好 mrec.setCamera(mCamera); mrec.setAudioSource(MediaRecorder.AudioSource.MIC); mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA); mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mrec.setAudioEn codeR(MediaRecorder.AudioEn coder.AMR_NB); mrec.setVideoEn codeR(MediaRecorder.VideoEn coder.MPEG_4_SP); mrec.setOutputFile(将videoPath); mrec.set previewDisplay(surfaceHolder.getSurface()); MREC prepare()。 isRecording = TRUE; mrec.start();}// ------------------------------------------------ -------------保护无效STO precording(){    如果(MREC!= NULL)        mrec.stop();    releaseMediaRecorder();    isRecording = FALSE;}// ------------------------------------------------ -------------私人无效releaseMediaRecorder(){    如果(MREC!= NULL)    {        mrec.reset(); //明确记录配置        mrec.release(); //释放记录对象        MREC = NULL;        mCamera.lock(); //锁摄像头,供以后使用    }}// ------------------------------------------------ -------------私人无效releaseCamera(){    如果(mCamera!= NULL)    {        mCamera.release(); //释放相机用于其它应用        mCamera = NULL;    }}// ------------------------------------------------ -------------@覆盖公共无效surfaceChanged(SurfaceHolder架,INT格式,宽度INT,        INT高){     尝试{            mCamera .SET previewDisplay(持有人);        }          赶上(IOException异常E)          {            // TODO自动生成catch块            e.printStackTrace();        }       mCamera。开始preVIEW();} // ------------------------------------------------ -------------@覆盖公共无效surfaceCreated(SurfaceHolder持有人){    如果(mCamera!= NULL)       {          参数PARAMS = mCamera.getParameters();          mCamera.setParameters(PARAMS);          mCamera.setDisplayOrientation(90);          尝试{            mCamera .SET previewDisplay(持有人);        }          赶上(IOException异常E)          {            // TODO自动生成catch块            e.printStackTrace();        }          mCamera。开始preVIEW();       }       其他       {          Toast.makeText(getApplicationContext(),摄像机不可!,Toast.LENGTH_LONG).show();         VideoRecorderActivity.this.finish();       }} // ------------------------------------------------ -------------@覆盖公共无效surfaceDestroyed(SurfaceHolder持有人){} 

解决方案

在之后preSS停止录制要么你可以播放录制的视频,或者如果你要重新启动preVIEW然后在STO precording方法做到这一点:

 保护无效STO precording(){如果(MREC!= NULL) 尝试{     mrec.stop();    }赶上(IllegalStateException异常E)    {   Log.e(TAG,拿到非法);   } releaseRecorder(); releaseCamera(); isRecording = FALSE; / *在这里做你在创建preVIEW做同样的过程即用来初始化相机并创建preVIEW * /  mCamera = Camera.open();  camera.lock();  surfaceHolder = surfaceView.getHolder();  surfaceHolder.addCallback(本); 尝试{                mCamera .SET previewDisplay(持有人);                mCamera。开始preVIEW();        }赶上(IOException异常E)        {                Log.v(TAG,无法启动preVIEW);                e.printStackTrace();        }}//释放记录后的记录    私人无效releaseRecorder(){            如果(MREC!= NULL){             Log.v(TAG,录音机发行);               mrec.release();               MREC = NULL;            }    }    //释放记录后的摄像头    私人无效releaseCamera(){            如果(mcamera!= NULL){                    尝试{                            mcamera.reconnect();                    }赶上(IOException异常五){                            e.printStackTrace();                    }                    Log.v(TAG,相机发布了);                    mcamera.release();                    mcamera = NULL;            } 
安卓被曝严重漏洞,信息安全问题值得重视

I am writing a video capture app for 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;
            }

阅读全文

相关推荐

最新文章