android android-4.0-ice-cream-sandwich hang mediarecorder

MediaRecorder.stop() se cuelga con Android 4.0(ICS)



android-4.0-ice-cream-sandwich hang (9)

Accidentalmente, rechacé una respuesta durante la revisión que se dio utilizando una "edición" de la pregunta:

user2171513 respondió:

Estaba enfrentando el mismo problema y la solución que encontré fue agregar mCamera.lock (); justo antes de mCamera.unlock (); antes de configurar la cámara en MediaRecorder ..

Al llamar a stop() dentro de mi actividad de captura de video, en ocasiones, el software se bloquea y no vuelve a la vida real. Solo disparar un ANR presionando "Atrás" me permitirá matar la actividad.

Dentro del registro, veo la siguiente línea repetida una y otra vez:

W / CameraSource (YYYYY): se agotó el tiempo de espera para los marcos de video entrantes de la cámara: XXXXXX us

Alguien más ha visto este comportamiento? ¿Alguna solución?


En mi caso, MediaRecorder.stop detener la grabación en Activity.onStop , cuando moví la llamada a MediaRecorder.stop a Activity.onPause solucionó mi problema.


En mi caso, la razón por la que sucedió esto fue porque detuve la cámara antes de cambiar, cambié la resolución de la vista previa y luego la reinicié todo mientras grababa. Algo que se vería así si comprabas todas las llamadas de método:

camera.startPreview(); camera.unlock(); recorder = new MediaRecorder(); recorder.setCamera(camera); recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setVideoFrameRate(24); recorder.setVideoEncodingBitRate(3000000); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); recorder.setOutputFile(output.getAbsolutePath()); recorder.setPreviewDisplay(holder.getSurface()); recorder.prepare(); recorder.start(); camera.stopPreview(); Camera.Parameters cameraParameters = camera.getParameters(); cameraParameters.setPreviewSize(x, y); camera.setParameters(cameraParameters); camera.startPreview(); recorder.stop(); recorder.reset(); recorder.release(); recorder = null; camera.lock(); camera.stopPreview();

En realidad, la razón por la que se cambió el tamaño de la vista previa después de que comenzó la grabación es complicada y específica del dominio, así que guardaré los detalles. Sin embargo, el punto es el mismo: no puede cambiar el tamaño de la vista previa sin detenerlo, pero no puede detener la vista previa después de que se haya iniciado la grabadora de medios. Estoy seguro de que hay otras cosas que podrían causar esto, como cualquier otro número de parámetros de la cámara.

Asegúrese de verificar que la cámara no se vea afectada durante la grabación de un video.


Esto también me sucedió porque estaba liberando la cámara antes de ejecutar stop () en la grabadora. También explica el mensaje de error "Tiempo de espera para los marcos de video entrantes de la cámara". Está esperando una cámara que ya está lanzada. Asegúrese de detener la grabadora, y solo entonces suelte la cámara:

mMediaRecorder.stop(); mMediaRecorder.release(); camera.stopPreview(); camera.release();


Hemos estado luchando por este problema durante mucho tiempo también. Acabamos de copiar el código del site desarrolladores de Android para capturar videos, pero la aplicación se cuelga antes de llamar a mediarecorder.stop (). Al depurar casi línea por línea, descubrí el ff. La línea causa el problema:

captureButton.setText("start");

Lo he comentado y detener el mediarecorder ya no causará un ANR. Lo que hice fue cambiar el fondo del texto en lugar de cambiar el texto del botón.

captureButton.setBackgroundResource(R.drawable.icon_post_camera_record_main);

Sin ver su código, no estoy seguro de si tenemos la misma causa del problema, pero esto soluciona el mío. Todavía estoy buscando por qué sucede esto para settext () y no para setBackgroundResource. Mi conjetura es que tiene algo que ver con la tarea de fondo / asíncrono pero todavía es una conjetura.


Probablemente esté iniciando la vista previa y el inicio del grabador de medios en onCreate (). Mueva esto a un punto posterior o agregue un new Handler.postDelayed(runnable, 1000);


Recomiendo que lo hagas en un hilo de fondo, para que tu aplicación no se atasque, incluso si el método stop() bloquea:

new Thread("STOP_RECORDER") { public void run() { Log.d(TAG, "Stopping recorder..."); mediaRecorder.stop(); Log.d(TAG, "Recorder successfully stopped"); } }.start();


También tengo un error como este. Mi actividad contiene un SurfaceView mutativo que muestra una vista previa, así que después de que comience a grabar, el ancho de SurfaceView se contrajo, y no pude detener la grabación, recibí el error ANR, solucioné el problema solucionando la dimensión de SurfaceView, espero que sea útil


mira esto-

@Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); releaseMediaRecorder(); releaseCamera(); } private void releaseMediaRecorder(){ if (recorder != null) { recorder.reset(); // clear recorder configuration recorder.release(); // release the recorder object recorder = null; camera.lock(); // lock camera for later use } } private void releaseCamera(){ if (camera != null){ camera.release(); // release the camera for other applications camera = null; } } public void stopRecording() { // Toast.makeText(this,"Inside the stop recording",Toast.LENGTH_SHORT).show(); // camera.unlock(); recorder.stop(); // recorder.reset(); recorder.release();#release the recorder after stop important. }