Java mp4parser版本冲突(压缩视频没有声音)
我在项目中使用这两个库: 这两个库都在本地导入到我的项目中(即复制并添加到项目中) 这两个库单独使用时都可以正常工作,但当我一起使用它们时,会出现一些类型为Java mp4parser版本冲突(压缩视频没有声音),java,android,mp4parser,conflicting-libraries,Java,Android,Mp4parser,Conflicting Libraries,我在项目中使用这两个库: 这两个库都在本地导入到我的项目中(即复制并添加到项目中) 这两个库单独使用时都可以正常工作,但当我一起使用它们时,会出现一些类型为程序类型的错误,我通过从第二个库中删除文件isoparser-1.0.6.jar,解决了这些错误,因为我注意到两个库使用相同的库'com.googlecode.mp4parser:isoparser',但版本不同:1.1.21用于第一个库,而1.0.6用于第二个库 仅使用旧库时,我得到以下代码: 错误:找不到符号类FileDataSour
程序类型的错误,我通过从第二个库中删除文件isoparser-1.0.6.jar
,解决了这些错误,因为我注意到两个库使用相同的库'com.googlecode.mp4parser:isoparser'
,但版本不同:1.1.21
用于第一个库,而1.0.6
用于第二个库
仅使用旧库时,我得到以下代码:
错误:找不到符号类FileDataSourceViahapImpl
它现在正在工作,但问题是输出视频(压缩后)上没有声音。我怎样才能解决这个问题
下面是我用来压缩视频的代码(修剪后):
EDIT1
使用相同的视频总结此处的场景:
VideoTrimmingLikeWhatsapp与verion 1.1.21=>配合使用
VideoTrimmingLikeWhatsapp与verion 1.0.6=>不起作用(缺少类的编译错误)
带有1.1.21=>的视频压缩机不工作(无声音)
带1.0.6=>工作的视频压缩机
我尝试了很多东西,但我在这里失去了踪迹。我也尝试过使用mp4isoparser的1.0.6版,同样的问题也发生了,输出视频没有声音。几天前我发布了一个问题,但我认为他们不会很快解决这个问题
我也提交了
我尝试从下载mp4parser版本1.1.21,并尝试在本地导入它,以便可以更改包名,但我做不到,因为它使用的是Maven
而不是Gradle
。旧版本是一个jar
文件,我需要对它进行反编译,以便处理它。我可以这样做吗
我还尝试使用ffmpeg
库,但与mp4isoparser相比,它们的工作速度都非常慢
编辑2
作者已经回复了我打开的,他说这个问题现在应该解决了。目前我无法验证它,因为我不再从事那个项目。如果有人能证实这一点,请告诉我添加此主题的答案。如果问题确实是由库版本引起的,那么将很难解决
首先我要仔细检查一下。您说过您单独测试了LIB,并且它们工作正常,但是,您是否尝试过使用“VideoTrimmingLikeWhatsapp”的输出作为“VideoCompressor”的输入
我怀疑“视频压缩机”在某些情况下会对音频进行奇怪的处理,本期中有人说没有音频:
如果您得到一个没有声音的视频使用“VideoCompressor”和他自己的“isoparser”版本,您可以将该版本作为问题的根源
然后,我认为,你可以:替换“VideoCompressor”:它似乎依赖Android库来执行压缩,你可以自己实现,或者你可以找到另一个库来完成这项工作。或者你可以修复“视频压缩机”:你可以向作者报告问题,或者你可以尝试自己修复它
如果您确认问题在于版本冲突:那么我可以考虑几个选项,但没有一个是容易的:
- 您可以尝试使用类加载器,并强制每个库使用正确版本的“isoparser”。这一点本身就很难做到,而且在安卓系统中可能会有很大的问题
- 您可以修补一个版本的isoparser,重命名包名(例如,重命名为com.googlecode.mp4parser_old),这样两个版本可以共存,您还应该修补客户端库以使用新的包名。这很难看,但似乎可行
- 您可以尝试更新“VideoCompressor”以与isoparser-1.1.21兼容。你也可以让作者来做
- 同样,您可以替换“VideoCompressor”(或者可能是“VideoTrimmingLikeWhatsapp”)
我知道这不是确定的答案,但我希望它能对您有所帮助。为时已晚,但我发送此解决方案是为了对其他人有用
是的,问题在于两个库之间的版本冲突
解决方案:
- 根本不要触摸视频压缩程序库
- 将视频微调器的“等参器”依赖项降级为与视频压缩程序库依赖项“等参器”相同的版本(1.0.6)
- 从TrimVideoUtils.java文件中删除以下行:
import com.googlecode.mp4parser.FileDataSourceViaHeapImpl;
然后更改以下行:
Movie movie = MovieCreator.build(new FileDataSourceViaHeapImpl(src.getAbsolutePath()));
到
完成了
注意:对于大文件要小心。因为此解决方案不使用内存映射。此组合对我有效:
implementation 'com.iceteck.silicompressorr:silicompressor:2.2.3'
implementation ('com.googlecode.mp4parser:isoparser:1.0.6') {
exclude group: 'org.aspectj', module: 'aspectjrt'
}
归功于:
您可以:替换“VideoCompressor”:它似乎依赖Android库来执行压缩,您可以自己实现它
。怎么做?有链接吗?请参阅post EDIT1了解我所做的更多内容。Well,VideoCompressor是开源的,您可以阅读代码并修复或重新实现它,但是。。是的,可以做很多工作。您面临的这个问题看起来很奇怪,请给我一些时间,我将尝试进一步调查。您好,我再次尝试使用VideoCompressor的预期等参器版本(1.0.6),并且生成的视频没有音频,你能提供一个视频样本吗?或者,您可以尝试转换此文件:@fontkap我尝试使用您的视频,但输出只是一个140B的文件,根本无法播放。这是一个文件,只有在使用旧版本时才起作用。这是非常奇怪的,这就是我得到的:57kb的小视频,但可以很好地播放。我试试你的档案。如果它是对你有用的信息,我正在使用我的手机运行样本视频
Movie movie = MovieCreator.build(src.getAbsolutePath());
implementation 'com.iceteck.silicompressorr:silicompressor:2.2.3'
implementation ('com.googlecode.mp4parser:isoparser:1.0.6') {
exclude group: 'org.aspectj', module: 'aspectjrt'
}