Приложение камеры переворачивает записанное видео

Я разрабатываю Android-приложение для видеокамеры, использую для своего приложения новый CameraX Api. Этот api действительно легко реализовать, и в моем приложении все работает нормально, но проблема в записи с передней камеры. Если я открываю переднюю камеру, она показывает мне зеркальное изображение, это нормально и нормально для каждой камеры, но если я записываю видео с помощью фронтальной камеры, то записанное видео переворачивается по горизонтали. Как я могу предотвратить такое переворачивание видео? Я хочу записывать видео так же, как Snapchat или Instagram

private void startCamera() {

    CameraX.unbindAll();

    Rational aspectRatio = new Rational (textureView.getWidth(), textureView.getHeight());
    Size screen = new Size(textureView.getWidth(), textureView.getHeight()); //size of the screen


    PreviewConfig pConfig = new PreviewConfig.Builder().setLensFacing(lensFacing).setTargetAspectRatio(aspectRatio).setTargetResolution(screen).build();
    final Preview preview  = new Preview(pConfig);

    preview.setOnPreviewOutputUpdateListener(
            new Preview.OnPreviewOutputUpdateListener() {
                //to update the surface texture we  have to destroy it first then re-add it
                @Override
                public void onUpdated(Preview.PreviewOutput output){
                    ViewGroup parent = (ViewGroup) textureView.getParent();
                    parent.removeView(textureView);
                    parent.addView(textureView, 0);

                    textureView.setSurfaceTexture(output.getSurfaceTexture());
                    updateTransform();
                }
            });

    ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder().setLensFacing(lensFacing).setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
            .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation()).build();
    final ImageCapture imgCap = new ImageCapture(imageCaptureConfig);

    VideoCaptureConfig videoCaptureConfig = new VideoCaptureConfig.Builder().setLensFacing(lensFacing)
            .setAudioRecordSource(MediaRecorder.AudioSource.MIC)
            .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation()).build();
    final VideoCapture videoCapture = new VideoCapture(videoCaptureConfig);

    findViewById(R.id.vidStart).setOnClickListener(new View.OnClickListener() {
        @SuppressLint("RestrictedApi")
        @Override
        public void onClick(View v) {
            File file = new File(Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".mp4");
            imgCap.takePicture(file, new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(@NonNull File file) {
                    String msg = "Pic captured at " + file.getAbsolutePath();
                    Toast.makeText(getBaseContext(), msg,Toast.LENGTH_LONG).show();
                }

                @Override
                public void onError(@NonNull ImageCapture.UseCaseError useCaseError, @NonNull String message, @Nullable Throwable cause) {
                    String msg = "Pic capture failed : " + message;
                    Toast.makeText(getBaseContext(), msg,Toast.LENGTH_LONG).show();
                    if(cause != null){
                        cause.printStackTrace();
                    }
                }
            });
            videoCapture.startRecording(file, new VideoCapture.OnVideoSavedListener() {
                @Override
                public void onVideoSaved(@NonNull File file) {
                    String msg = "Vid captured at " + file.getAbsolutePath();
                    Toast.makeText(getBaseContext(), msg,Toast.LENGTH_LONG).show();
                }

                @Override
                public void onError(VideoCapture.UseCaseError useCaseError, String message, @Nullable Throwable cause) {

                }
            });

        }
    });

    findViewById(R.id.vidStop).setOnClickListener(new View.OnClickListener() {
        @SuppressLint("RestrictedApi")
        @Override
        public void onClick(View v) {
            videoCapture.stopRecording();
        }
    });

    //bind to lifecycle:
    CameraX.bindToLifecycle(this, preview, videoCapture);
}

person Waqas Ali    schedule 27.11.2019    source источник
comment
вы можете поделиться своим кодом захвата?   -  person Vasudev Vyas    schedule 27.11.2019
comment
Да, я отредактирую вопрос и добавлю код   -  person Waqas Ali    schedule 27.11.2019
comment
?? где код?   -  person Vasudev Vyas    schedule 27.11.2019
comment
Я добавил код камеры, пожалуйста, помогите мне в этом   -  person Waqas Ali    schedule 28.11.2019
comment
узнайте, как установить ориентацию в AndroidX. Я делал в Android 2 Camera, а не в AndroidX Camera   -  person Vasudev Vyas    schedule 28.11.2019
comment
Дело не в ориентации, чувак, дело в переворачивании экрана видео   -  person Waqas Ali    schedule 28.11.2019
comment
Чувак, я починил флип, или, можно сказать, обратная проблема с камерой с передним объективом с ориентацией, или это можно назвать вращением.   -  person Vasudev Vyas    schedule 28.11.2019
comment
proandroiddev.com/ следуйте этому руководству, возможно, вы получите свое решение .   -  person Vasudev Vyas    schedule 28.11.2019
comment
Учебник посвящен захвату изображений, мне нужно решение для захвата видео   -  person Waqas Ali    schedule 28.11.2019


Ответы (1)


Перевёрнутый вывод предназначен. На большинстве устройств более запутанная часть связана с сеансом предварительного просмотра, чем с записью.

При предварительном просмотре с передней камеры зеркальный предварительный просмотр упрощает использование передней камеры для пользователей.

Вам нужно прочитать этот SO-ответ для глубокого понимания. как сделать-видео- захвачено-фронтальной-камерой-не-инверсией-андроидом

person MJ Studio    schedule 14.02.2020