结合音频和视频-Android

结合音频和视频-Android,android,Android,我正在开发一个应用程序来捕获视频和下载音频。我可以单独保存这些文件,但找不到一种方法来组合这些文件,使新的视频与音频 视频文件为.mp4格式,音频文件为.mp3格式。它们的长度完全相同 有没有办法合并这些文件?我已经尝试过,但找不到一种方法来合并两个文件 我也可以用FFMPEG来实现,但没有找到实现这一点的最佳方法。请帮帮我,我是android新手。我认为这个库适合这种情况。我在下面的链接中找到了将音频和视频合并成单个mp4文件的示例代码 如果您正在考虑通过ffmpeg执行此操作,您可以使用或。

我正在开发一个应用程序来捕获视频和下载音频。我可以单独保存这些文件,但找不到一种方法来组合这些文件,使新的视频与音频

视频文件为.mp4格式,音频文件为.mp3格式。它们的长度完全相同

有没有办法合并这些文件?我已经尝试过,但找不到一种方法来合并两个文件

我也可以用FFMPEG来实现,但没有找到实现这一点的最佳方法。请帮帮我,我是android新手。

我认为这个库适合这种情况。我在下面的链接中找到了将音频和视频合并成单个mp4文件的示例代码


如果您正在考虑通过ffmpeg执行此操作,您可以使用或。

我没有正确地理解这一点,如何合并这两个文件以创建新的mp4。还有一件事,我认为FFMPEG只能通过NDK工作,或者我们也可以通过SDK将其集成到Eclipse中?请帮助我,因为我只是Android开发的新手。@AndrewRyan你试过代码了吗?。关于FFMpeg,我们也可以通过SDK进行集成。查看此链接是的,我已经尝试了所有这些东西,我将相机中的文件保存为.mp4。现在我有两个文件,一个是.mp4,另一个是1.mp3。现在我还需要做什么来创建新的mp4?即使我使用了上面的代码,但无法转换或创建新的mp4文件。@AndrewRyan:-您得到结果了吗?,实际上我想创建新的mp4文件,当merge 1是mp4,而另一个是1.mp3..@b1izzard时,在这段代码中我得到了如下异常..:-“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.util.List com.coremedia.iso.box.MovieBox.getbox(java.lang.Class)'–“如何解析?”?
public class Mp4ParserAudioMuxer implements AudioMuxer {
    @Override
    public boolean mux(String videoFile, String audioFile, String outputFile) {
        Movie video;
        try {
            video = new MovieCreator().build(videoFile);
        } catch (RuntimeException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

        Movie audio;
        try {
            audio = new MovieCreator().build(audioFile);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } catch (NullPointerException e) {
            e.printStackTrace();
            return false;
        }

        Track audioTrack = audio.getTracks().get(0);
        video.addTrack(audioTrack);

        Container out = new DefaultMp4Builder().build(video);

        FileOutputStream fos;

        try {
            fos = new FileOutputStream(outputFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }

        BufferedWritableFileByteChannel byteBufferByteChannel = 
            new BufferedWritableFileByteChannel(fos);

        try {
            out.writeContainer(byteBufferByteChannel);
            byteBufferByteChannel.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }
}