studio intent example developer capturar android video-capture mediarecorder android-mediarecorder

intent - mediarecorder android example



MediaRecorder.stop() error en la parada:-1007 (3)

Estoy grabando video con MediaRecorder. Mi código funciona bien en 2.3.3 pero falla en 4.0.3.

El problema es el siguiente: el código mediaRecorder.stop () lanza la RuntimeExeption

java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method)

con mensaje de LogCat

04-05 15:10:51.815: E/MediaRecorder(15709): stop failed: -1007

ACTUALIZAR

Descubrí que MediaPlayer informa de un error (a través de MediaPlayer.OnErrorListener) casi inmediatamente después del inicio. El código de error es 100 (el servidor de medios murió), extra -1007.

ACTUALIZA 2 Código para preparar el MediaRecorder

c = Camera.open(); ... // Step 1: Unlock and set camera to MediaRecorder camera.unlock(); mediaRecorder.setCamera(camera); // Step 2: Set sources mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) CamcorderProfile profile = CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH); // manual set up! mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); mediaRecorder.setVideoFrameRate(profile.videoFrameRate); mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); mediaRecorder.setAudioChannels(profile.audioChannels); mediaRecorder.setAudioEncodingBitRate(profile.audioBitRate); mediaRecorder.setAudioSamplingRate(profile.audioSampleRate); mediaRecorder.setAudioEncoder(profile.audioCodec); //mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mediaRecorder.setVideoEncoder(profile.videoCodec); // mediaRecorder.setProfile(profile); // Step 4: Set output file mediaRecorder.setOutputFile("somefile.mp4"); // Step 5: Set the preview output mediaRecorder.setPreviewDisplay(preview.getHolder().getSurface()); // Step 6: Prepare configured MediaRecorder try { mediaRecorder.prepare(); } catch ... { release mediaRecorder}

luego simplemente llamo mediaRecorder.start () tenga en cuenta que necesito que el video esté codificado en formato mp4. Este código funciona en Samsng Galaxy GIO (Android 2.3.3) y falla como se describe en Acer E305 (Android 4.0.2)

¿Algunas ideas? Gracias.


Así que encontré este error reportado para mí en el emulador de Android para API 18 (después de que la grabación funcionara bien en versiones posteriores).

Lo que encontré es que si hubiera llamado a Camera.startPreview() antes de iniciar e iniciar mi instancia de MediaRecorder , obtendría un stop failed: -1007 al llamar a MediaRecorder.stop , pero si llamaba a Camera.stopPreview() antes Inicializando mi MediaRecorder el video se grabaría bien.

espero que esto ayude


Citando la documentación del método "stop" en MediaRecorder.java en 4.0.3:

Detiene la grabación. Llama a esto después de empezar (). Una vez que se detiene la grabación, tendrá que volver a configurarla como si se hubiera construido. Tenga en cuenta que se lanza una excepción RuntimeException a la aplicación, si no se han recibido datos de audio / video válidos cuando se llama a stop (). Esto sucede si se llama a stop () inmediatamente después de start (). La falla permite que la aplicación tome las medidas correspondientes para limpiar el archivo de salida (eliminar el archivo de salida, por ejemplo), ya que el archivo de salida no se construye correctamente cuando esto sucede.

Y el hecho de que MediaPlayer esté informando que este "servidor de medios murió" se debe a la misma razón. ¿Puede publicar el resto de su código para ver si hay algún concepto erróneo que pueda causar este problema?


Resuelto al fin. El problema fue configurar el tamaño de la vista previa antes de configurar la vista previa real de la cámara. El tamaño de la vista previa DEBE ser igual al tamaño del video seleccionado.

CamcorderProfile profile = [get required profile]; Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(profile.videoFrameWidth,profile.videoFrameHeight); mCamera.setParameters(parameters); mCamera.setPreviewDisplay([surface holder]); mCamera.startPreview(); ... //configure MediaRecorder and call MediaRecorder.start()