我在我的应用程序中使用mp4parser合并音频和视频,这在android中运行良好。但是,当我创建.aar文件并以统一方式添加插件时,它会抛出NullPointerException。
这是日志
java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference 12-20 13:47:07.409 9171-10512/? W/System.err: at com.coremedia.iso.PropertyBoxParserImpl.(PropertyBoxParserImpl.java:67) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.coremedia.iso.IsoFile.(IsoFile.java:59) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:49) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:38) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.actvt.showdown.pluggin.Mp4ParserAudioMuxer.mux(Mp4ParserAudioMuxer.java:31) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.actvt.showdown.pluggin.Utils.mergeAudioAndVideo(Utils.java:217) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.actvt.showdown.pluggin.Utils.access$400(Utils.java:44) 12-20 13:47:07.409 9171-10512/? W/System.err: at com.actvt.showdown.pluggin.Utils$1.run(Utils.java:200) 12-20 13:47:07.410 9171-10512/? W/System.err: at java.lang.Thread.run(Thread.java:761)
当我这样做时
video = new MovieCreator().build(videoFile);
它没有在jar中找到isoparser-default.properties文件或类似的东西?我正在使用这个jar在unity3d pluggin android本机代码中使用mp4解析器。
答案 0 :(得分:1)
我目前遇到同样的问题,虽然我没有解决方案我知道这个错误的原因,但在PropertyBoxParserImpl.java中它试图获取此文件:
InputStream is = getClass().getResourceAsStream("/isoparser-default.properties");
虽然它没有找到isoparser-default.properties,虽然它打包在Unity的.jar / .aar文件中,但我相信解决办法是找到一种方法来使用Unity加载该文件。
编辑:
我已经弄明白了,并将在mp4parser git repo上发布一个问题,这就是我所做的:
我已经创建了这些类的副本:
在PropertyBoxParserImpl类中,我修改了这一行:
InputStream is = getClass().getResourceAsStream("/isoparser-default.properties");
进入这一行:
InputStream is = UnityPlayer.currentActivity.getApplicationContext().getAssets().open("isoparser-default.properties");
我还将isoparser-default.properties放在Android Studio项目的src / assets文件夹中,所以现在它加载了文件而没有任何错误。
下一步是从外部库获取aspectjrt.jar文件并将其放在Unity项目的Plugins / Android文件夹中,对于mp4parser jar文件也是如此。
完成所有这些后,我能够组合Unity的mp4文件,请记住,如果两个文件没有相同的编码/比特率/分辨率,则合并将失败。
编辑#2:
实际上,我很抱歉但是仍然找不到文件,你实际上需要在移动设备上的Unity应用程序数据文件夹中重写文件,我使用Unity中的WWW类完成了这个,将文件复制到Application.persistentDataPath + "/isoparser-defaut.properties"
希望有所帮助!