2013-12-23 137 views
0

我已經做了一個應用程序,我必須記錄video.when我在我的模擬器中使用網絡攝像頭方向運行它是正常的,但是當我在手機中運行相同的方向獲得90度改變.cant瞭解它的發生可以幫助我嗎?這裏是我的代碼---在攝像頭和手機中的攝像頭方向

private boolean prepareMediaRecorder(){ 
    myCamera = getCameraInstance();   
    mediaRecorder = new MediaRecorder(); 
    myCamera.unlock(); 
    mediaRecorder.setCamera(myCamera); 

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 

    mediaRecorder.setOutputFile("/sdcard/video.mp4"); 

    mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec. 
    mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M 

    mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface()); 

    try { 
     mediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     releaseMediaRecorder(); 
     return false; 
    } catch (IOException e) { 
     releaseMediaRecorder(); 
     return false; 
    } 
    return true; 

} 

回答

2

預覽方向取決於設備的方向和相機方向。

基本上你需要的是根據這些條件來計算相機預覽的方向。

我們需要兩個幫助方法:

1 - 計算設備的方向:

public int getDeviceOrientation(Context context) { 

    int degrees = 0; 
    WindowManager windowManager = 
      (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    int rotation = windowManager.getDefaultDisplay().getRotation(); 

    switch(rotation) { 
     case Surface.ROTATION_0: 
      degrees = 0; 
      break; 
     case Surface.ROTATION_90: 
      degrees = 90; 
      break; 
     case Surface.ROTATION_180: 
      degrees = 180; 
      break; 
     case Surface.ROTATION_270: 
      degrees = 270; 
      break; 
    } 

    return degrees; 
} 

2 - 計算相機預覽旋轉:

public static int getPreviewOrientation(Context context, int cameraId) { 

    int temp = 0; 
    int previewOrientation = 0; 

    Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
    Camera.getCameraInfo(cameraId, cameraInfo); 

    int deviceOrientation = getDeviceOrientation(context); 
    temp = cameraInfo.orientation - deviceOrientation + 360; 
    previewOrientation = temp % 360; 

    return previewOrientation; 
} 

在你的代碼, mediaRecorder.prepare();

int rotation = getPreviewOrientation(context, cameraId); 
mediaRecorder.setOrientationHint(rotation); 

要使用這些方法,需要使用上下文和相機ID。