MediaRecorder setVideoSize muestra un comportamiento diferente en diferentes dispositivos

Estoy usando un grabador de medios para grabar vídeo en una aplicación para Android.

mMediaRecorder.setCamera(mServiceCamera); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); String file_name = Environment.getExternalStorageDirectory().getPath() +"/myVideo.mp4"; mMediaRecorder.setOutputFile(file_name); mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); mMediaRecorder.prepare(); mMediaRecorder.start(); 

El problema está en la línea

  mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height); 

En HTC y Xperia, setVideoSize funciona bien (Funcionará sólo si no comentar esta línea). Pero en Nexus y Note, setVideoSize no funcionará (Funcionará sólo si comento esta línea).

¿Qué debo hacer para que la aplicación se ejecute correctamente en todos estos dispositivos?

Usted necesita entender que la vista previa y el video capturado real son dos cosas diferentes, asimismo los tamaños de vista previa y los tamaños de vídeo son dos parámetros diferentes. Lo que ves en el visor es esencialmente la vista previa, pero no es lo que realmente se graba.

  1. Al iniciar una cámara, establece el tamaño de vista previa en la cámara. Pero debe consultar los tamaños de vista previa compatibles y debe establecer uno entre ellos.

    Cámara cámara = cámara.open (); Lista psizes = camera.getParameters () .getSupportedPreviewSizes ();

  2. Una vez que haya configurado la vista previa, puede iniciar la grabación utilizando un MediaRecorder, y el tamaño del vídeo se puede configurar en la grabadora de medios, y es el tamaño real del vídeo que se capturará. De nuevo, debe establecer uno de los tamaños de vídeo compatibles.

    Tamaño de la lista = camera.getParameters () .getSupportedVideoSizes ();

Y luego, puede configurar uno de estos para el grabador de medios

 mediaRecorder.setVideoSize(videoWidth, videoHeight); 

Por lo tanto, recuerde comprobar siempre los tamaños admitidos, de lo contrario usted está obligado a obtener una caída de la aplicación.

Los tamaños de vídeo en un dispositivo son iguales a los tamaños de vista previa. Primero debe comprobar si el tamaño del video está disponible o no. Los tamaños de video en diferentes dispositivos pueden ser diffrent.so, compruebe primero los tamaños de vista previa disponibles usando getSupportedPreviewSizes () y luego configure el tamaño del video. Esto devolverá una lista. Sólo tendrá que seleccionar una de ellas.

  • Frecuencia de muestreo y ruido de Android MediaRecorder
  • Pausa ... como la aplicación de cámara predeterminada?
  • Captura de video de MediaRecorder en modo retrato
  • Grabar toda la pantalla, incluida la vista previa de la cámara frontal
  • Cómo cambiar entre la cámara delantera y trasera cuando se utiliza MediaRecorder android
  • MediaRecorder - setOrientationHint () excepción / error
  • MediaRecorder "falló -12"
  • ¿Cómo saber si un MediaRecorder está en estado de ejecución o no?
  • Media Recorder start falló en android para cámara
  • MediaRecorder falló cuando detengo la grabación
  • Android API8 setDisplayOrientation no afecta en absoluto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.