怎样才可以有previewing永久时为Android捕获视频? [英] How I can have previewing permanently when capture video for android?

查看:185
本文介绍了怎样才可以有previewing永久时为Android捕获视频?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写为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;
            }

这篇关于怎样才可以有previewing永久时为Android捕获视频?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆