Uso de MediaPlayer para reproducir un archivo AMR creado por MediaRecorder falla con muri null
Estoy escribiendo una aplicación que graba voz desde el micrófono en formato AMR usando MediaRecorder, y luego reproduce los datos utilizando MediaPlayer.
Esa es la meta de todos modos.
- Cómo saber cuando MediaRecorder ha terminado de escribir datos en el archivo
- Android MediaRecorder para grabar una superficie (no la cámara)
- Grabar toda la pantalla, incluida la vista previa de la cámara frontal
- Problemas con MediaRecorder al iniciar la captura de vídeo en android
- Error de la cámara "No se puede conectar a la cámara" o en algunos teléfonos aparece el error "La cámara está usando otra aplicación"
Estoy bastante seguro de mi lado MediaRecorder está trabajando, estoy produciendo el archivo de datos en el lugar correcto a la velocidad de datos correcta. Aquí es cómo comienzo y para mi MediaRecorder
public void OnStartRecord(View v ) { System.out.println( "StartRecord"); try { audioFile = File.createTempFile("amrtmp", ".amr", getApplicationContext().getFilesDir()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println( "Recording to " + audioFile.getAbsolutePath()); mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setAudioEncodingBitRate(4750); mRecorder.setAudioSamplingRate(8000); mRecorder.setOutputFile(audioFile.getAbsolutePath()); try { mRecorder.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mRecorder.start(); } public void OnStopRecord(View v ) { System.out.println( "StopRecord"); mRecorder.stop(); mRecorder.release(); }
Esto funciona como un encanto. La salida típica es algo como
StartRecord Recording to /data/data/com.test.playback/files/amrtmp-235967797.amr
Y cuando empiezo, luego dejo de grabar, puedo ver que el archivo ha sido creado y tiene una cierta cantidad de datos en él que corresponde correctamente a los ajustes.
Nota lateral: detecto un zumbido extraño en mi altavoz mientras que esto funciona. ¿Alguna idea de lo que es?
Cuando trato de reproducir el archivo de nuevo sin embargo no tengo ningún problema final. He intentado lo siguiente:
public void OnPlay(View v ) { MediaPlayer mPlayer = new MediaPlayer(); mPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); FileInputStream FIS = null; try { FIS = new FileInputStream(audioFile.getAbsolutePath()); mPlayer.setDataSource(FIS.getFD()); mPlayer.prepare(); } catch( Exception e ) { e.printStackTrace(); } mPlayer.start(); }
Esto hace que nada se reproduzca en absoluto con la siguiente salida de MediaPlayer:
Start () mURI es nulo
También he probado el mismo código, pero la configuración de la fuente de datos de mPlayer de manera diferente:
mPlayer.setDataSource(audioFile.getAbsolutePath());
Esto falla cuando prepare se llama con un estado java.io.IOException 0x1.
Tengo que imaginar que hay algo más que necesito hacer con MediaPlayer para configurarlo correctamente. ¿Alguna sugerencia?
- MediaRecorder - setOrientationHint () excepción / error
- Cómo cambiar framerate cuando se utiliza clase MediaRecorder
- ¿Cómo recuperar datos al grabarlos y visualizarlos como gráficos (Visualizador) en la pantalla?
- MediaRecorder falló cuando detengo la grabación
- Problema con android MediaRecorder setVideoSize ()
- Android MediaRecorder: Sobreescritura continua
- Problemas con la clase MediaRecorder para grabar audio - prepare () da una excepción - Permiso denegado
- La grabación de vídeo con MediaRecorder y FileOutputStream produce un archivo de vídeo que no se puede reproducir
- Android MediaPlayer se bloquea después de buscar una nueva posición de vídeo
- Falló el setParameters de la cámara: FATAL EXCEPTION