2013-06-02 2 views
0

동영상을 녹화하고 재생하려고합니다.카메라가 setVideoSize()를 지원하지 않습니다.

동영상 녹화를 시작할 때 많은 기기가 폭주하는 것을 보았습니다.

logcat에서 문제가 비디오의 크기라는 것을 깨달았습니다.

카메라보기가 작고, 몇 픽셀 정도가 문제입니까?

수정해야 할 사항은 무엇입니까? 방법?

private boolean prepareVideoRecorder() { 

     mMediaRecorder = new MediaRecorder(); 

     // Step 1: Unlock and set camera to MediaRecorder 
     mCamera.unlock(); 
     mMediaRecorder.setCamera(mCamera); 

     // Step 2: Set sources 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
     mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

     // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
     mMediaRecorder.setProfile(CamcorderProfile 
       .get(CamcorderProfile.QUALITY_HIGH)); 

     // Step 4: Set output file 
     mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO) 
       .toString()); 
     outputFileName = getOutputMediaFile(MEDIA_TYPE_VIDEO).toString(); 
     Log.d(TAG,"idan outputFileName" + outputFileName); 


     // Step 5: Set the preview output 
     // mMediaRecorder.setVideoSize(640, 480); //try 
     mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); 

     // Step 6: Prepare configured MediaRecorder 
     try { 
      mMediaRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      Log.d(TAG, 
        "IllegalStateException preparing MediaRecorder: " 
          + e.getMessage()); 
      releaseMediaRecorder(); 
      return false; 
     } catch (IOException e) { 
      Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); 
      releaseMediaRecorder(); 
      return false; 
     } 
     return true; 
    } 




public void surfaceCreated(SurfaceHolder holder) { 
     // The Surface has been created, now tell the camera where to draw the preview. 





    Log.d(TAG,"surfaceCreated camera id" + mCamera); 

    try { 
      CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
      Camera.Parameters parameters = mCamera.getParameters(); 
      parameters.setPreviewSize(profile.videoFrameWidth, profile.videoFrameHeight); 
      mCamera.setParameters(parameters); 
      mCamera.setPreviewDisplay(holder); 
      mCamera.startPreview(); 
     } 
     catch (IOException e) { 
      Log.d(TAG, "Error setting camera preview: " + e.getMessage()); 
     } 
} 

로그 캣 오류 :

06-02 19:29:14.177: D/CameraSource(115): Camera does not support setVideoSize() 
06-02 19:29:14.177: D/CameraSource(115): Requested video size (1920x1088) isSetVideoSizeSupportedByCamera 0 
06-02 19:29:14.177: E/CameraSource(115): Video dimension (1920x1088) is unsupported 
06-02 19:29:14.177: D/CameraService(115): unlock (pid 115) 
06-02 19:29:14.177: D/QualcommCameraHardwareZSL(115): virtual bool android::QualcommCameraHardware::recordingEnabled() recordingState=0 
06-02 19:29:14.177: D/CameraService(115): clear mCameraClient (pid 115) 
06-02 19:29:14.177: E/MediaRecorder(30873): start failed: -19 
06-02 19:29:14.177: V/MediaRecorderJNI(30873): process_media_recorder_call 
06-02 19:29:14.177: E/MediaRecorder(30873): start failed. 
06-02 19:29:14.177: E/MediaRecorder(30873): try to delete broken file: /mnt/sdcard/Movies/Your_voice/Your_voice020613_192914.mp4 
06-02 19:29:14.187: D/AndroidRuntime(30873): Shutting down VM 
06-02 19:29:14.187: W/dalvikvm(30873): threadid=1: thread exiting with uncaught exception (group=0x40ac3228) 
06-02 19:29:14.187: E/AndroidRuntime(30873): FATAL EXCEPTION: main 
06-02 19:29:14.187: E/AndroidRuntime(30873): java.lang.RuntimeException: start failed. 
06-02 19:29:14.187: E/AndroidRuntime(30873): at android.media.MediaRecorder._start(Native Method) 
06-02 19:29:14.187: E/AndroidRuntime(30873): at android.media.MediaRecorder.start(MediaRecorder.java:712) 
06-02 19:29:14.187: E/AndroidRuntime(30873): at com.example.uploadvideo.MainActivity.onPlaying(MainActivity.java:165) 

답변

2

CamcorderProfile.get(int) 기본 (후면) 카메라의 프로파일을 반환합니다. mCamera가 전면 카메라 인 경우 적절한 카메라 ID와 함께 CamcorderProfile.get(int, int)을 사용해야합니다.

+0

많은 도움을주었습니다. 해결책은 int numCameras = Camera.getNumberOfCameras(); \t \t 경우 (numCameras> 1) { \t \t \t mMediaRecorder.setProfile (CamcorderProfile \t \t \t \t \t 갔지 (Camera.CameraInfo.CAMERA_FACING_FRONT, CamcorderProfile.QUALITY_HIGH)); 다른 \t \t \t \t } { \t \t \t \t \t \t mMediaRecorder.setProfile (CamcorderProfile \t \t \t \t \t 갔지 (Camera.CameraInfo.CAMERA_FACING_BACK, CamcorderProfile.QUALITY_HIGH)); \t \t} – idan

0

/** Camera 객체의 인스턴스를 안전하게 가져 오는 방법입니다. */

public Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     c = Camera.open(Camera.getNumberOfCameras() - 1); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     onError(); 
    } 
    return c; 
} 
관련 문제