2012-06-18 4 views
6

여러 오디오 파일을 녹음하는 Android 프로젝트를 작성 중입니다. 따라서 다음 매개 변수를 설정하고 있습니다. 녹음은 정상적으로 작동합니다.안드로이드 - 두 개의 MP4 파일 결합하기

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

내 문제는 내가 기록 할 때마다 출력이 별도의 파일로 작성된다는 것입니다. 이제이 파일들을 하나의 파일에 결합해야합니다. 누구나 Android 프로젝트에서 여러 MPEG 4 파일을 결합하는 방법을 알고 있습니까? 당신의 도움에 대한

감사합니다 .... 안드로이드에서

+0

mp4 파일 또는 mp4 파일과 오디오를 결합 하시겠습니까? – 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

답변

1

없이 당신이 그것대로 작동하지 않는 때문에 작업을 다음이 또한 아래 모든 파일 작업을 통해 수행하는 경우, 두 개의 오디오 파일을 결합하는 어떤 붙박이 기능이있다 오디오 파일의 헤더가 다릅니다.

귀하의 안드로이드 응용 프로그램에 외부 라이브러리 FFMPEG을 사용하는 것이 좋습니다.

8

mp4parser 라이브러리를 사용하는 것이 좋습니다. 네이티브 라이브러리를 다룰 필요가 없습니다. AppendExample을 살펴보십시오. 그것은 당신이하고 싶은 일을 정확히 수행합니다. 최신 버전을 찾으십시오. AppendExample의 작동 원리를 보려면 아래를 참조하십시오.

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

나는 isoviewer-2.0-RC-22.jar 라이브러리를 넣었고, 코드를 복사 한 후에 AppendExample.class가 존재하지 않는다고 말하면, 라이브러리를 만들거나해야합니까? –

+1

필요하지 않습니다. 난 그냥 classpath에 액세스하는 데 사용 –

+0

mp4parser 라이브러리는 2 개 이상의 파일에 대한 안드로이드에서 작동하지 않습니다! – Alin