6

我正在编写一个 Android 项目,我正在录制几个音频文件。因此,我正在设置以下参数。录音工作正常。

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

我的问题是每次录制时,输出都写在一个单独的文件中。现在,我需要将这些文件合并为一个文件。有谁知道如何在 Android 项目中组合多个 MPEG 4 文件?

谢谢你的帮助....

4

2 回答 2

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();
于 2012-07-18T23:27:31.670 回答
1

在 android 中没有用于组合两个音频文件的任何内置功能,如果您通过任何文件操作完成它,那么这也可以工作,因为它不工作,因为音频文件的标题不同。

我建议为您的 android 应用程序使用外部库FFMPEG 。

于 2012-06-18T13:28:28.630 回答