android camera - ¿Cómo hacer que el video capturado por la cámara frontal no sea Android inverso?
android-camera video-recording (1)
Grabo video usando MediaRecorder. Cuando uso la cámara trasera, funciona bien, pero cuando uso la cámara frontal, el video capturado se voltea / invierte. Significa que el elemento de la derecha, aparecerá a la izquierda. La vista previa de la cámara funciona bien , solo el video capturado final volteado.
Aquí está la vista previa de la cámara.
Pero el video final aparece así (todo el elemento en el lado izquierdo, aparece en el lado derecho)
Lo que probé hasta ahora:
Traté de aplicar la
matrix
al preparar la grabadora, pero parece que cambia algo.
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í todas estas preguntas a continuación, pero todo esto no resolvió mi problema. Para obtener información, uso
SurfaceView
para la vista previa de la cámara, por lo que esta pregunta aquí no ayuda.
1) Android flip video de la cámara frontal espejo volteado
2) ¿Cómo evitar que Android invierta la imagen desde la cámara frontal?
3) Evite voltear la cámara frontal
Entonces mi pregunta es:
1) ¿Cómo capturar un video con la cámara frontal sin que el video sea inverso (exactamente igual con la vista previa de la cámara)?
2) ¿Cómo lograr esto cuando la vista previa de la cámara está usando
SurfaceView
pero no
TextureView
?
(porque todas las preguntas que menciono anteriormente, hablan sobre el uso de
TextureView
)
Toda solución posible es mayormente bienvenida ... Tq
EDITAR
Hice 2 videoclips cortos para aclarar el problema, descargue y eche un vistazo
1) El video durante la vista previa de la cámara de la grabación
Entonces, si la aplicación de la cámara del sistema produce un video similar a tu aplicación, no hiciste algo mal. Ahora es el momento de comprender qué sucede con la grabación de video de la cámara frontal.
La cámara frontal no es diferente de la cámara posterior en la forma en que captura imágenes fijas o videos. Hay una diferencia en 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, para que pueda verse 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 tiene en las dos manos y mírese, verá para su 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:
Así es como su compañero ve la misma escena
Normalmente, la grabación de un video se realiza desde el punto de 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 almacenar el videoclip frontal como si lo grabara desde el espejo (como si la grabadora estuviera en su mano en la primera imagen). A algunas personas les gusta esta característica, otras la odian (ver 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 puede usar MediaRecorder para eso. Puede usar la API de nivel inferior de MediaCodec para grabar marcos procesados. Debe voltear cada cuadro ''manualmente'', y esto puede ser un éxito 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 la cámara se renderiza a la textura.