2012-06-18 11 views
6

Estoy escribiendo un proyecto de Android en el que estoy grabando varios archivos de audio. Por lo tanto, estoy configurando los siguientes parámetros. La grabación funciona bien.Android: combinación de dos archivos MP4

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

Mi problema es que cada vez que registro, la salida se escribe en un archivo separado. Ahora, necesito combinar estos archivos en un solo archivo. ¿Alguien tiene una idea de cómo combinar varios archivos MPEG 4 en un proyecto de Android?

Gracias por su ayuda ....

+0

¿desea combinar archivos mp4 o audio con mp4file? – Dinesh

+0

http://stackoverflow.com/questions/8268195/strange-issue-in-combining-audio-files-and-playing-in-different-api-versions – Venky

+0

http://stackoverflow.com/questions/8243947/best -way-to-combine-audio-files-in-android – Venky

Respuesta

1

En androide No existe ninguna funcionalidad incorporada para combinar dos archivos de audio, Si ha terminado a través de cualquier operación de archivo, entonces esto también manos a la obra porque no su trabajo como los encabezados de los archivos de audio son diferentes.

Me recomendó utilizar una biblioteca externa FFMPEG para su aplicación de Android.

8

Sugeriría usar mi biblioteca mp4parser, entonces no tiene que lidiar con librerías nativas. Eche un vistazo al AppendExample. Hace exactamente lo que quieres hacer. Esté atento a la última versión. Consulte a continuación el ejemplo de apéndice para tener una idea de cómo funciona.

Movie[] inMovies = new Movie[]{MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-deutsch-audio.mp4"))), 
      MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-english-audio.mp4")))}; 

    List<Track> videoTracks = new LinkedList<Track>(); 
    List<Track> audioTracks = new LinkedList<Track>(); 

    for (Movie m : inMovies) { 
     for (Track t : m.getTracks()) { 
      if (t.getHandler().equals("soun")) { 
       audioTracks.add(t); 
      } 
      if (t.getHandler().equals("vide")) { 
       videoTracks.add(t); 
      } 
     } 
    } 

    Movie result = new Movie(); 

    if (audioTracks.size() > 0) { 
     result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); 
    } 
    if (videoTracks.size() > 0) { 
     result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); 
    } 

    IsoFile out = new DefaultMp4Builder().build(result); 

    FileChannel fc = new RandomAccessFile(String.format("output.mp4"), "rw").getChannel(); 
    fc.position(0); 
    out.getBox(fc); 
    fc.close(); 
+1

he puesto la biblioteca isoviewer-2.0-RC-22.jar, y después de haber copiado el código dice que AppendExample.class no existe, ¿tengo que crearlo, o es de la biblioteca? –

+1

no lo necesitas. Solo lo uso para acceder a classpath –

+0

¡la biblioteca mp4parser no funciona en Android para más de 2 archivos! – Alin

Cuestiones relacionadas