¿Por qué mostrar el error IllegalStateException al configurar MediaRecorder?
Mi código que configura MediaRecorder, muestra error en el conjunto de filas Calidad
mMediaRecorder = new MediaRecorder(); // Step 1: Unlock and set camera to MediaRecorder mCamera.stopPreview(); mCamera.unlock(); mMediaRecorder.setCamera(mCamera); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setProfile(CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH)); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); // Step 4: Set output file mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); // Step 5: Set the preview output mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); // Step 6: Prepare configured MediaRecorder try { mMediaRecorder.prepare(); Log.d("DEBUG", "IllegalStateException preparing MediaRecorder: " + e.getMessage()); releaseMediaRecorder(); return false; } catch (IOException e) { Log.d("DEBUG", "IOException preparing MediaRecorder: " + e.getMessage()); releaseMediaRecorder(); return false; }
Ex:
- La aplicación de la API de la cámara Android se bloquea en onResume
- Cómo capturar una imagen y almacenarla con la cámara nativa de Android
- Camera.open () que bloquea el hilo de la interfaz de usuario
- Cámara Android setDisplayOrientation: comportamiento extraño para la pestaña galaxia
- La rotación de webcamTexture difiere en unit3d bajo Android
java.lang.IllegalStateException
Stacktrace:
java.lang.IllegalStateException at android.media.MediaRecorder.setOutputFormat(Native Method) at android.media.MediaRecorder.setProfile(MediaRecorder.java:366) at jp.osaka.E028.prepareVideoRecorder(E028.java:1441) at jp.osaka.E028.access$16(E028.java:1403) at jp.osaka.E028$6.onClick(E028.java:344) at android.view.View.performClick(View.java:3517) at android.view.View$PerformClick.run(View.java:14155) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4503) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) at dalvik.system.NativeStart.main(Native Method)
¿Por qué mostrar el error IllegalStateException al configurar MediaRecorder?
- Lista de tamaños de imagen de cámara compatibles
- Compruebe la cámara en Android 1.6 (SDK 4)
- Cámara frontal Android
- Android obtener ruta de la foto sin tomar foto
- detección de cámara android
- Espejo de la cámara frente a frente en Android
- Determinación de la resolución de la cámara (es decir, megapíxeles) Programatically in Android
- Android 5.1.1 por defecto la cámara devuelve la intención vacía en onActivityResult después de capturar la imagen
Realmente hace mMediaRecorder.setOutputFormat()
dos veces: Una vez explícitamente y después mMediaRecorder.setProfile()
intenta hacerlo de nuevo como se puede ver en su stacktrace.
El grabador de medios Android tiene una robustez muy baja para cosas como esa.
Quite la línea que dice
mMediaRecorder.setOutputFormat();
Y el error debe desaparecer. Y por cierto. retirar
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
Que es lo que mMediaRecorder.setProfile()
ya ha hecho tan bien.
Es posible que tenga que liberar el objeto de la cámara antes de que comience el MediaRecorder, con algo como:
private void releaseCamera() { if (myCamera != null) { // Release the camera object so other classes can use it. myCamera.release(); myCamera = null; } }
Llame al método anterior antes de iniciar los métodos de MediaRecorder.
IMPORTANTE : También, los métodos abajo DEBEN llamarse en este orden:
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setVideoSize(640,480); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
Los bits importantes aquí son que setVideoEncoder
y setAudioEncoder
son llamados últimos.