java - 如何将视频和音频合并为一个文件 [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);
解决方案
推荐阅读
- docker - 如何从 docker-compose 或 docker run 写入现有的填充卷
- javascript - 根据日期从数据库中获取唯一值,当用户单击日期时,然后展开数据库中可用的详细信息
- javascript - 如何通过同一行的另一列的一个文本框中的输入获取值
- flutter - 如何在 vscode 中禁用“运行|调试”行?
- javascript - 使用 fetch API 和 NodeJS(express)
- python - 在pygame中出现游戏结束屏幕后重新启动蛇游戏
- c++ - 需要一个标识符
- python - 使用 pip 安装 wheel 文件后,找不到模块错误
- java - 在所有嵌套实体中选择几个:SPRING JPA
- c - 有没有办法为多个参数编号和类型定义一个“通用”结构