首页 > 解决方案 > 如何将视频和音频合并为一个文件 [Android Q]

问题描述

我正在尝试使用Google M4parser将视频和音频混合到一个视频文件中,我创建了必要的路径,如下所示:

 path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download";
 audioPath = path + "/" + "audio.m4a";
 videoNoSoundPath = path + "/" + "video.mp4";
 finalVideoPath = path + "/out.mp4";

为了确保所有文件都存在,我放了一个日志:

 Log.d("APP:", "SIZE AUDIO: " + FileUtils.getSize(videoNoSoundPath));
 Log.d("APP:", "SIZE VIDEO: " + FileUtils.getSize(audioPath));

我能够看到每个文件的大小:

1601725413.214 14511-15076/maa.abc D/APP:: SIZE AUDIO: 4.101MB
1601725413.215 14511-15076/maa.abc D/APP:: SIZE VIDEO: 156.150KB

当我运行下面的代码时,除了 Android Q 之外的所有 Android 版本都可以正常工作:

 Mp4ParserAudioMuxer mp4ParserAudioMuxer = new Mp4ParserAudioMuxer();
 boolean isOK = mp4ParserAudioMuxer.mux(videoNoSoundPath, audioPath, finalVideoPath);
 mSubscriber.notifyData(isOK);
 Log.d("APP:", isOK ? " OK " : "NOT OK");

你可以在这里mux找到完整的方法

错误日志:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.coremedia.iso.boxes.MovieBox.getBoxes(java.lang.Class)' on a null object reference
    at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:51)
    at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:38)
    at maa.abc.utils.mediautils.Mp4ParserAudioMuxer.mux(Mp4ParserAudioMuxer.java:24)
    at 

maa.abc.ui.activities.EditVideo.lambda$audioVideoMigration$7$EditVideo(EditVideo.java:330)
        at maa.abc.ui.activities.-$$Lambda$EditVideo$7NICJDo6IH3OsEAcyQtNXlJY-CI.call(Unknown Source:2)
        at com.jyuesong.android.schedule.JObservable$2.run(JObservable.java:52)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

这里指出的问题: video = new MovieCreator().build(videoFile);

标签: javaandroidandroid-10.0mediamuxermp4parser

解决方案


推荐阅读