three_gpp studio outputformat mediaplayer example codecs android mediarecorder

android - studio - mediarecorder outputformat three_gpp



MediaRecorder falló cuando detengo la grabación (2)

Tengo este error. Alguien puede ayudarme, por favor, creo que es algo relacionado con la escucha táctil ... El error está ocurriendo cuando suelto el dedo.

04-25 20:07:00.263: D/FB Sessions(18429): false 04-25 20:07:04.533: I/MediaRecorderJNI(18429): prepare: surface=0x189250 (identity=1813) 04-25 20:07:10.493: E/MediaRecorder(18429): stop failed: -1007 04-25 20:07:10.493: D/AndroidRuntime(18429): Shutting down VM 04-25 20:07:10.493: W/dalvikvm(18429): threadid=1: thread exiting with uncaught exception (group=0x40018608) 04-25 20:07:10.503: E/AndroidRuntime(18429): FATAL EXCEPTION: main 04-25 20:07:10.503: E/AndroidRuntime(18429): java.lang.RuntimeException: stop failed. 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.media.MediaRecorder.stop(Native Method) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.crewbase.rec.RecordActivity.stopRecording(RecordActivity.java:151) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.crewbase.rec.RecordActivity.access$2(RecordActivity.java:150) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.crewbase.rec.RecordActivity$1.onTouch(RecordActivity.java:79) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.View.dispatchTouchEvent(View.java:3897) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1737) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1153) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1721) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2200) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.view.ViewRoot.handleMessage(ViewRoot.java:1884) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.os.Handler.dispatchMessage(Handler.java:99) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.os.Looper.loop(Looper.java:130) 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.app.ActivityThread.main(ActivityThread.java:3835) 04-25 20:07:10.503: E/AndroidRuntime(18429): at java.lang.reflect.Method.invokeNative(Native Method) 04-25 20:07:10.503: E/AndroidRuntime(18429): at java.lang.reflect.Method.invoke(Method.java:507) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 04-25 20:07:10.503: E/AndroidRuntime(18429): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 04-25 20:07:10.503: E/AndroidRuntime(18429): at dalvik.system.NativeStart.main(Native Method)

Y eso está sucediendo cuando intento ejecutar este código:

del oyente táctil:

/// Preview is SurfaceView in my view preview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: prepareRecording(); break; case MotionEvent.ACTION_MOVE: //Log.d(TAG, String.format("ACTION_MOVE | x:%s y:%s", break; case MotionEvent.ACTION_UP: stopRecording(); break; } return true; } });

Y estos dos métodos:

private void prepareRecording() { try { camera.unlock(); recorder = new MediaRecorder(); recorder.setCamera(camera); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); File tempFile = new File(Environment.getExternalStorageDirectory(), "/rec/temp/video_" + String.valueOf(videoCount) + ".mp4"); recorder.setOutputFile(tempFile.getPath()); recorder.setVideoFrameRate(25); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); recorder.setPreviewDisplay(holder.getSurface()); recorder.prepare(); recorder.start(); } catch (IllegalStateException e) { Log.e("REDORDING :: ",e.getMessage()); e.printStackTrace(); } catch (IOException e) { Log.e("REDORDING :: ",e.getMessage()); e.printStackTrace(); } } private void stopRecording() { recorder.stop(); camera.lock(); }


Mira la documentation :

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.

En otras palabras: Dalvik lanza la excepción a propósito. Tienes que manejarlo para limpiar después de tu aplicación. Tendrías que manejarlo así:

private void stopRecording() { try{ recorder.stop(); }catch(RuntimeException stopException){ //handle cleanup here } camera.lock(); }


Tuve un error similar -1007 cuando estaba grabando audio con AMR_WB , pero resultó que el problema era que me olvidé de establecer la frecuencia de muestreo.

mediaRecorder.setAudioSamplingRate(16000);