MovieCreator()上的NullPointerException。构建android unity插件

时间:2017-05-19 07:06:39

标签: android unity3d nullpointerexception mp4parser

我在我的应用程序中使用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解析器。

1 个答案:

答案 0 :(得分:1)

我目前遇到同样的问题,虽然我没有解决方案我知道这个错误的原因,但在PropertyBoxParserImpl.java中它试图获取此文件:

InputStream is = getClass().getResourceAsStream("/isoparser-default.properties");

虽然它没有找到isoparser-default.properties,虽然它打包在Unity的.jar / .aar文件中,但我相信解决办法是找到一种方法来使用Unity加载该文件。

编辑:

我已经弄明白了,并将在mp4parser git repo上发布一个问题,这就是我所做的:

我已经创建了这些类的副本:

  • IsoFile
  • MovieCreator
  • PropertyBoxParserImpl

在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"

希望有所帮助!