Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mp4parser版本冲突(压缩视频没有声音)_Java_Android_Mp4parser_Conflicting Libraries - Fatal编程技术网

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' 
}