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

hid*_*s02 9 java android conflicting-libraries mp4parser

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

https://github.com/HemendraGangwar/VideoTrimmingLikeWhatsapp https://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);
Run Code Online (Sandbox Code Playgroud)

EDIT1

使用相同的视频在此处使用场景:

VideoTrimmingLikeWhatsapp与verion 1.1.21 =>有效

带有verion 1.0.6 =>的VideoTrimmingLikeWhatsapp不起作用(编译缺失类的错误)

带有1.1.21 =>的VideoCompressor不起作用(没有声音)

VideoCompressor 1.0.6 =>工作

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

我也在这里提交.

我尝试从这里下载mp4parser版本1.1.21 ,并尝试在本地导入它,以便我可以更改包名称,但我不能,因为它Maven不使用Gradle.旧版本是一个jar文件,我需要反编译它,以便我可以搞砸它.我能这样做吗?

我也尝试使用ffmpeg库,但与mp4isoparser相比,它们都运行得非常慢

Gal*_*Rom 5

这种组合对我有用:

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

致谢: https: //github.com/AndreyAsadchy https://github.com/Tourenathan-G5organization/SiliCompressor/issues/141#issuecomment-625308490


fon*_*kap 0

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

首先我会仔细检查一下。您说您单独测试了这些库并且它们有效,但是您是否尝试过使用“VideoTrimmingLikeWhatsapp”的输出作为“VideoCompressor”的输入?

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

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

如果您使用“VideoCompressor”及其自己版本的“isoparser”获得没有声音的视频,您可以丢弃库版本作为问题的根源。

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

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

  • 您可以尝试使用类加载器并强制每个库使用其正确版本的“isoparser”。仅此一项就很难做到,而且在 Android 中可能会出现很大的问题。

  • 您可以修补 isoparser 的一个版本,重命名软件包名称(例如,重命名为 com.googlecode.mp4parser_old ),以便两个版本可以共存,您还应该修补客户端库以使用新的软件包名称。这非常丑陋,但似乎可行。

  • 您可以尝试更新“VideoCompressor”以与 isoparser-1.1.21 兼容。你也可以要求作者这样做。

  • 同样,您可以替换“VideoCompressor”(或者可能是“VideoTrimmingLikeWhatsapp”)

我知道这不是最终的答案,但我希望它对您有所帮助。