Android 网络摄像头和手机中的摄像头方向

Android 网络摄像头和手机中的摄像头方向,android,video,camera,Android,Video,Camera,我已经做了一个应用程序,我必须录制视频。当我在我的模拟器上运行它时,使用网络摄像头的方向是可以的,但当我在手机上运行相同的方向时,方向会发生90度的变化。我不明白它发生了什么,有人能帮我吗?这是我的密码--- 预览方向取决于设备方向和相机方向 基本上,您需要的是根据这些条件计算摄影机预览的方向 我们需要两种帮助方法: 1-计算设备方向: public int getDeviceOrientation(Context context) { int degrees = 0; Win

我已经做了一个应用程序,我必须录制视频。当我在我的模拟器上运行它时,使用网络摄像头的方向是可以的,但当我在手机上运行相同的方向时,方向会发生90度的变化。我不明白它发生了什么,有人能帮我吗?这是我的密码---


预览方向取决于设备方向和相机方向

基本上,您需要的是根据这些条件计算摄影机预览的方向

我们需要两种帮助方法:

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;
}  
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;
}
2-计算相机预览旋转:

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;
}  
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()之前

要使用这些方法,需要使用上下文和相机Id