由网友(你别来我无恙)分享简介:我写为Android视频捕获应用程序。我有preVIEW我第一次想捕捉。但经过我preSS停止,我不再获得preVIEW当我再次开始拍摄。怎样才可以有preVIEW选项永久? 保护无效的startRecording()抛出IOException异常{字符串状态= android.os.Environment.getEx...![安卓被曝严重漏洞,信息安全问题值得重视](https://p.xsw88.cn/allimgs/daicuo/20230908/150.png)
我写为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; }
![安卓被曝严重漏洞,信息安全问题值得重视](https://p.xsw88.cn/allimgs/daicuo/20230908/150.png)
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;
}
相关推荐
最新文章