Intento hacer una aplicación de video personalizada. Trabajo usando la configuración en el manifiesto solo 2.2 (API 8).Captura de video MediaRecorder en modo retrato
Todo va bien, pero no entiendo por qué el modo de retrato de video no difiere de lanscape one.
Para hacer la detección del dispositivo cambie la orientación de uso este código dentro de surfaceChanged()
if (mCamera != null) {
Camera.Parameters p = mCamera.getParameters();
try {
mCamera.stopPreview();
} catch (Exception e) {
// TODO: handle exception
}
int previewWidth = 0;
int previewHeight = 0;
if (mPreviewSize != null) {
Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
switch (rotation) {
case Surface.ROTATION_0:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setDisplayOrientation(90);
break;
case Surface.ROTATION_90:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setDisplayOrientation(0);
break;
case Surface.ROTATION_180:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setDisplayOrientation(270);
break;
case Surface.ROTATION_270:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setDisplayOrientation(180);
break;
}
p.setPreviewSize(previewWidth, previewHeight);
mCamera.setParameters(p);
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
Log.d(TAG, "Cannot start preview.", e);
}
}
funciona como un encanto. Si giro la orientación de cambio de superficie del dispositivo, llamo a surfaceChanged, donde la cámara está configurada para la rotación de pantalla correspondiente.
La pregunta es cómo determinar más adelante si el video se capturó en el modo paisaje o en el retrato uno. Como obtuve todos los videos son capturados en orientación horizontal. No depende de setDisplayOrientation, que solo afecta al proceso de vista previa.
También explorando el problema Me di cuenta de que si se usa la aplicación estándar de la cámara, se escribe una etiqueta especial en un archivo de video (visto en MediaInfo): Rotación: 90 para los videos capturados en retrato.
Pero la clase MediaRecorder no.
Parece que es el problema. ¿Alguien tiene que resolver esto?
setOrientationHint sólo está disponible para API 9. Tengo el mismo problema, pero necesito una solución de API 8. – AndroidDev
Pasé horas tratando de descubrir este estúpido problema de orientación preliminar. Muchas gracias @ Taiko! Esto es lo que funcionó para mí: en el método 'onCreate' de la clase que implementa' SurfaceHolder.Callback', incluí este código: 'mCamera = Camera.open(); mCamera.setDisplayOrientation (90); mCamera.unlock(); 'seguido de' mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera (mCamera); '. ¡Trabajado como un encanto! – Cat