Android Camera recording video but plays upside down

后端 未结 10 1555
南旧
南旧 2020-12-10 04:42

I record a video using the below code and it records perfectly, but when it plays the video, it plays it upside down.

I tried settings mrec.setOrientationHint(

10条回答
  •  独厮守ぢ
    2020-12-10 04:55

    Here is the code for custom portrait camera, will set the correct rotation of picture and video:


    private OrientationEventListener orientationEventListener;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //...
        orientationEventListener = new OrientationEventListener(this) {
            @Override
            public void onOrientationChanged(int orientation) {
                if (orientation == ORIENTATION_UNKNOWN) return;
    
                flashButton.setRotation(-(orientation));
                cameraButton.setRotation(-(orientation));
    
                if (camera != null) {
                    Parameters parameters = camera.getParameters();
                    CameraInfo info = new CameraInfo();
                    Camera.getCameraInfo(selectedCamera, info);
                    orientation = (orientation + 45) / 90 * 90;
                    int rotation = 0;
                    if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
                        rotation = (info.orientation - orientation + 360) % 360;
                    } else {  // back-facing camera
                        rotation = (info.orientation + orientation) % 360;
                    }
                    parameters.setRotation(rotation);
                    if (!isRecording) {
                        mediaRecorder.setOrientationHint(rotation);
                    }
    
                    camera.setParameters(parameters);
                }
            }
        };
    }
    
    
    @Override
    protected void onResume() {
        super.onResume();
        //...
        orientationEventListener.enable();
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        orientationEventListener.disable();
        //...
    }
    

    Teste with portrait orientation. Remeber to put it in your manifest to test code. I dont know if work in landscape.

    
    

提交回复
热议问题