2012-06-18 50 views
6

私はいくつかのオーディオファイルを記録しているAndroidプロジェクトを書いています。したがって、次のパラメータを設定しています。録音は正常に動作します。Android - 2つのMP4ファイルを結合する

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

私の問題は、記録するたびに出力が別のファイルに書き込まれることです。今、これらのファイルを1つのファイルに結合する必要があります。誰かが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

なしあなたはそののように動作していないので、動作するように、このダウンも任意のファイル操作でそれを行っている場合は、2つのオーディオファイルを結合するための任意の作り付けの機能がありますオーディオファイルのヘッダーが異なります。

あなたのAndroidアプリケーションには、外部ライブラリ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

あなたはそれを必要としません。私はちょうどクラスパスにアクセスするためにそれを使用する –

+0

mp4parserライブラリは、2つ以上のファイルのアンドロイドで動作しません! – Alin

関連する問題