¿Cómo hacer que el video capturado por la cámara frontal no sea Android inverso?

Grabo video usando MediaRecorder. Cuando uso la cámara trasera, funciona bien, pero cuando se usa la cámara frontal, el video capturado se invierte / se invierte. Significa que el elemento de la derecha aparecerá a la izquierda. La vista previa de la cámara funciona bien , solo el video final capturado se volteó.

Aquí está la vista previa de la cámara como

enter image description here

Pero el video final aparece así (todo el elemento en el lado izquierdo, aparece en el lado derecho)

enter image description here

Lo que intenté hasta ahora:

Intenté aplicar la matrix cuando preparé la grabadora, pero parece que no cambia nada.

 private boolean prepareRecorder(int cameraId){ //# Create a new instance of MediaRecorder mRecorder = new MediaRecorder(); setCameraDisplayOrientation(this,cameraId,mCamera); int angle = getVideoOrientationAngle(this,cameraId); mRecorder.setOrientationHint(angle); if(cameraId == Camera.CameraInfo.CAMERA_FACING_FRONT){ Matrix matrix = new Matrix(); matrix.preScale(1.0f,-1.0f); } //all other code to prepare recorder here } 

Ya leí toda esta pregunta a continuación, pero todo esto parece que no resolvió mi problema. Para información, uso SurfaceView para la vista previa de la cámara, por lo que esta pregunta aquí no ayuda.

1) Android flip espejo de la cámara frontal volcó video

2) ¿Cómo evitar que Android invierta la imagen de la cámara frontal?

3) Evite voltear la cámara frontal

Entonces mi pregunta es:

1) ¿Cómo capturar un video en la cámara frontal que el video no es inverso (exactamente lo mismo con la vista previa de la cámara)?

2) ¿Cómo lograr esto cuando la vista previa de la cámara usa SurfaceView pero no TextureView ? (haga toda la pregunta que menciono arriba, TextureView sobre el uso de TextureView )

Toda la solución posible es bienvenida. TQ

EDITAR

Hice 2 videos cortos para aclarar el problema, por favor descárgalo y échale un vistazo

1) El video durante la vista previa de la cámara de la grabación

2) El video del producto final de la grabación

Entonces, si la aplicación de cámara del sistema genera un video similar a su aplicación, no hizo algo incorrecto. Ahora es el momento de entender qué ocurre con la grabación de video de la cámara frontal.

La cámara frontal no es diferente de la cámara trasera en la forma en que captura imágenes fijas o video. Existe una diferencia de cómo el teléfono muestra la vista previa de la cámara en la pantalla. Para que parezca más natural para el usuario, Android (y todos los demás sistemas) refleja la vista previa, de modo que puede verse a sí mismo como en un espejo.

Es importante comprender que esto solo se aplica a la forma en que se le presenta la vista previa. Si elige cualquier aplicación de videoconferencia, conecte dos dispositivos que tenga en sus manos y mírese, verá con sorpresa que las dos instancias de usted mismo se voltearon.

Esto no es un error, esta es la forma natural de presentar el video a la otra parte.

Ver el boceto:

Así es como ves la escena:

como ves la escena

Así es como tu compañero ve la misma escena

cómo tu compañero ve la misma escena

Normalmente, la grabación de un video se realiza desde el punto si la vista de su compañero, como en la segunda imagen. Esta es la configuración natural para, por ejemplo, videoconferencia.

Pero Snapchat y algunas otras aplicaciones sociales eligen guardar el video clip frontal como si lo grabasen desde el espejo (como si la grabadora estuviera en tu mano en la primera imagen). A algunas personas les gusta esta característica, otras lo odian (consulte https://forums.androidcentral.com/general-help-how/664539-front-camera-pics-mirrored-reversed-only-snapchat.html y https: // www. .reddit.com / r / nexus6 / comments / 3846ay / has_anyone_found_a_fix_for_snapchat_flipping )

No puedes usar MediaRecorder para eso. Puede usar la API de nivel inferior de MediaCodec para registrar ttwigs procesadas. Es necesario voltear cada cuadro ‘manualmente’, y esto puede ser un golpe de rendimiento significativo, porque normalmente el MediaRecorder ‘conecta’ la cámara al codificador de hardware de una manera muy eficiente, sin necesidad de copiar los píxeles a la memoria del usuario. Esta respuesta muestra cómo puede manipular la forma en que se procesa la cámara para la textura.