안녕하세요.

 

카메라 동영상 녹화후 특정 폴더에 파일을 저장하게 될 경우 정상적으로 저장이 되지 않아서 문의 글을 남겨 봅니다.

 

나타나는 현상은

 

동영상 녹화 이후 다음 Activity 로 넘어갈 경우에는 정상적으로 video가 재생이 되나,

 

이후 갤러리에서 확인 할경우 지원하지 않는 포멧이라고 팝업이 나타나며 재생이되지 않습니다.

 

이상태에서 다시 동영상을 녹화 하고 갤러리를 확인 하게 되면,

 

이전에 녹화 했던 동영상 파일이 사라지고, 방금전에 녹화한 동영상만 보입니다.

 

그런데, 밑에 표시해둔데로 폴더+파일명이 아닌  /sdcard/Video_파일명 으로 녹화를 할경우 정상적으로 갤러리에서 확인할 수 있습니다.

 

특정폴더에 파일을 저장시키려고 하는데 제가 빠트리거나 아니면 뭘더 해주어야 될까요? ㅠㅠ

 

 private void beginRecording(SurfaceHolder holder){
     //String Filename = null;    
     if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
      dirPath = Environment.getExternalStorageDirectory() + "/Videos/";
     } else {
      dirPath = getFilesDir().getAbsolutePath() + "/Videos/";
     }
     
     mFileName = FileNameString(mFileName) + ".mp4";
     gVideoFilePath = dirPath + mFileName;
     
     //gVideoFilePath = "/sdcard/Video_"  + String.valueOf(System.currentTimeMillis()) + ".mp4";
     dir = new File(dirPath);
     // 일치하는 폴더가 없으면 생성
  if( !dir.isDirectory() ) {
   dir.mkdirs();
   try {
    dir.createNewFile();
   } catch (IOException e) {
    e.printStackTrace();
   }    
     }
     
     if(recorder != null){
      recorder.stop();
      recorder.release();
      recorder = null;
     }
     
     String state = android.os.Environment.getExternalStorageState();
     if(state.equals(android.os.Environment.MEDIA_MOUNTED)){
      Log.e("CAM TEST", "I/O Exception");
     }
     
     // 파일 생성,초기화
     File outFile = new File(gVideoFilePath);
     if(outFile.exists()){
      outFile.delete();
     }
     if(mSurface.mCamera != null){
      mSurface.mCamera.stopPreview();
      mSurface.mCamera.release();
      mSurface.mCamera = null;
      Log.e("CAM TEST", "4. Release Camera  ----> OK~~!!!");
     }
     try{
          mProgressHandler.sendEmptyMessageDelayed(0, 100);      
      recorder = new MediaRecorder();
      // Video,Audio 값을 설정 해 준다.
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
      recorder.setVideoSize(640, 480);
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
      recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
      recorder.setMaxDuration(10);
      // 프리뷰를 보여줄 서피스의 설정
      recorder.setPreviewDisplay(holder.getSurface());
      // 녹화할 대상 파일 설정
      recorder.setOutputFile(gVideoFilePath);
      recorder.prepare();
      recorder.start();
     } catch (IllegalStateException e) {
   Toast.makeText(CameraPreviewActivity.this, "IllegalStateException", 1).show();
  } catch (IOException e) {
   Toast.makeText(CameraPreviewActivity.this, "IOException", 1).show();
  } catch(Exception e){
      Log.e("CAM TEST", "Error ~~~!!!!! T_T");
      e.printStackTrace();
     } 
    }

private void stopREC(){
     try{
      recorder.stop();
     } catch(Exception e){
      Toast.makeText(CameraPreviewActivity.this, "카메라가 종료되지 않음", 1).show();
     }
     
     recorder.release();
     recorder = null;
     mCurRecTimeMs = -999;
     mProgressHandler.sendEmptyMessageDelayed(0, 0);
     mRecProgressBar.setMax(10);
     mRecProgressBar.setProgress(0);
     
     MakeVideoThumbnail();
     
     // 찍은 사진이 정상적으로 갤러리에 보일 수 있도록 하는 부분입니다.
     // 현재는 SD 카드에 있는것만 업데이트 되게 되어 있습니다.
     IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);
        intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
        intentFilter.addDataScheme("file");
        registerReceiver(mReceiver, intentFilter);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
                + Environment.getExternalStorageDirectory())));
      finish();
    }