怎样才可以有previewing永久时为Android捕获视频? [英] How I can have previewing permanently when capture video for android?
本文介绍了怎样才可以有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屋!
查看全文