mp4parser版本冲突(压缩视频没有声音)



我在项目中使用这两个库:

https://github.com/HemendraGangwar/VideoTrimmingLikeWhatsapphttps://github.com/fishwjy/VideoCompressor

这两个库都在本地导入到我的项目中(即复制它们并将它们添加到项目中)

当分别使用时,这两个库都可以正常工作,但当我将它们一起使用时,我会遇到一些类型为Program type already present的错误,我通过从第二个库中删除文件isoparser-1.0.6.jar来解决这些错误,因为我注意到这两个库使用相同的库'com.googlecode.mp4parser:isoparser',但版本不同:第一个库使用1.1.21,第二个库使用1.0.6

当只使用旧库时,我会得到以下代码:

错误:找不到符号类FileDataSourceViaHeapImpl

它现在正在工作,但输出视频(压缩后)没有声音的问题。我该如何解决?

这是我用来压缩视频的代码(修剪后):

VideoController.getInstance().convertVideo(tmpFile.toString(), dstFile.toString(),
VideoController.COMPRESS_QUALITY_MEDIUM, null);

EDIT1

在这里用相同的视频总结场景:

VideoTrimmingLikeWhatsapp版本1.1.21=>工作

VideoTrimmingLikeWhatsapp with verion 1.0.6=>不起作用(缺少类的编译错误)

1.1.21版本的VideoCompressor=>不工作(没有声音)

VideoCompressor与1.0.6=>工作

我尝试了很多东西,但我在这里失去了踪迹。我还尝试过使用SiliCompressor,它似乎也使用了mp4isoparser的1.0.6版本,但同样的问题也在发生,输出视频没有声音。几天前我在这里发布了一个问题,但我认为他们不会很快解决这个问题。

我也在这里提交了。

我尝试从这里下载mp4parser 1.1.21版本,并尝试在本地导入它,这样我就可以更改包名,但我做不到,因为它使用的是Maven而不是Gradle。旧版本是一个jar文件,我需要对它进行反编译,这样我就可以处理它了。我能做到吗?

我也尝试过使用ffmpeg库,但与mp4isoparser 相比,所有库的工作速度都很慢

编辑2

SiliCompressor的作者已经回复了我打开的这里,他说这个问题现在应该解决了。目前我无法核实,因为我不再从事该项目。如果有人能证实这一点,请告诉我把答案添加到这个话题中。

这个组合对我有用:

implementation 'com.iceteck.silicompressorr:silicompressor:2.2.3'
implementation ('com.googlecode.mp4parser:isoparser:1.0.6') {
exclude group: 'org.aspectj', module: 'aspectjrt' 
}

贷方:https://github.com/AndreyAsadchyhttps://github.com/Tourenathan-G5organisation/SiliCompressor/issues/141#issuecomment-625308490

如果问题真的是由库版本引起的,那么很难解决。

首先我会仔细检查一下。你说你单独测试了libs,它们有效,但是,你试过使用"VideoTrimingLikeWhatsapp"的输出作为"VideoCompressor"的输入吗?

我怀疑"VideoCompressor"在某些情况下对音频做了一些奇怪的事情,有人在这个问题上说没有音频:

https://github.com/fishwjy/VideoCompressor/issues/1

如果使用"VideoCompressor"和他自己版本的"isolaser"获得没有声音的视频,则可以放弃库版本作为问题的根源。

然后,我认为,你可以:取代"VideoCompressor":它似乎依赖于Android库来执行压缩,你可以自己实现,或者你可以找到另一个库来完成这项工作。或者你可以修复"VideoCompressor":你可以向作者报告问题,也可以自己尝试修复。

如果你确认问题是版本冲突:那么我可以考虑几个选项,但没有一个是容易的:

  • 您可以尝试使用类加载器,并强制每个库使用其正确版本的"等参线器"。单凭这一点可能很难做到,而且在安卓系统中可能会有很大的问题。

  • 您可以修补一个版本的isolser,将包名称重命名(例如,重命名为com.googlecode.mp4parser_old),以便它们的两个版本可以共存,还应该修补客户端库以使用新的包名称。这很难看,但似乎可行。

  • 您可以尝试更新"VideoCompressor",使其与等参线-1.1.21兼容。你也可以要求作者这样做。

  • 再次,您可以替换"VideoCompressor"(或可能是"VideoTrimmingLikeWhatsapp")

我知道这不是决定性的答案,但我希望它能对你有所帮助。

现在已经太晚了,但我发送这个解决方案是为了对其他人有用。

是的,问题在于两个库之间的版本冲突。

解决方案:

  • 不要触摸视频压缩程序库
  • 将视频修剪器的"等参线器"依赖项降级为与视频压缩器库依赖项"等参曲线器"相同的版本(1.0.6)
  • 从TrimVideoUtils.java文件中删除以下行:

    import com.googlecode.mp4parser.FileDataSourceViaHeapImpl;
    

    然后更改以下行:

    Movie movie = MovieCreator.build(new FileDataSourceViaHeapImpl(src.getAbsolutePath()));
    

    Movie movie = MovieCreator.build(src.getAbsolutePath());
    

完成了。

注意:对于大文件要小心。因为这个解决方案不使用内存映射。

相关内容

  • 没有找到相关文章

最新更新