【问题标题】:app crash when try to combine mp4 videos尝试合并 mp4 视频时应用程序崩溃
【发布时间】:2014-08-11 12:43:20
【问题描述】:

我下载了 mp4parser 的最新源代码,并用它来合并两个 mp4 文件。 当我尝试合并两个 mp4 视频时,应用程序崩溃了。

当我运行这行代码时

  MovieCreator.build("mnt/sdcard/CamVideo/0.mp4")

应用程序崩溃了,崩溃日志是

  08-11 17:27:49.023: E/AndroidRuntime(24864): FATAL EXCEPTION: main
  08-11 17:27:49.023: E/AndroidRuntime(24864): java.lang.ArrayIndexOutOfBoundsException:             length=0; index=0
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.googlecode.mp4parser.authoring.samples.DefaultMp4SampleList.<init>(DefaultMp4SampleList.java:52)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.coremedia.iso.boxes.mdat.SampleList.<init>(SampleList.java:33)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.googlecode.mp4parser.authoring.Mp4TrackImpl.<init>(Mp4TrackImpl.java:59)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:58)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:39)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.coderzheaven.pack.CustomCameraActivity.MergeVideos(CustomCameraActivity.java:200)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.coderzheaven.pack.CustomCameraActivity$1.onClick(CustomCameraActivity.java:108)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at android.view.View.performClick(View.java:4274)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at android.view.View$PerformClick.run(View.java:17357)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at android.os.Handler.handleCallback(Handler.java:615)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at android.os.Handler.dispatchMessage(Handler.java:92)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at android.os.Looper.loop(Looper.java:137)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at android.app.ActivityThread.main(ActivityThread.java:4949)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at java.lang.reflect.Method.invokeNative(Native Method)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at java.lang.reflect.Method.invoke(Method.java:511)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
  08-11 17:27:49.023: E/AndroidRuntime(24864):  at dalvik.system.NativeStart.main(Native Method)

我正在使用与示例代码“isoparser-custom.properties”和“isoparser-default.properties”中相同的属性文件

我期待电影对象应该正确构建。谁能告诉我我在这方面做错了什么,或者可以向我发送合并两个 mp4 文件的完整功能代码。

已编辑: 我从 maven 项目 (http://repo1.maven.org/maven2/com/googlecode/mp4parser/isoparser/1.0.2/) 下载了这个文件“isoparser-1.0.2.jar”,但是应用程序崩溃了这个崩溃报告

  08-18 17:32:20.571: E/AndroidRuntime(31446): FATAL EXCEPTION: main
  08-18 17:32:20.571: E/AndroidRuntime(31446): java.lang.ExceptionInInitializerError
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at java.lang.Class.classForName(Native Method)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at java.lang.Class.forName(Class.java:217)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at java.lang.Class.forName(Class.java:172)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coremedia.iso.PropertyBoxParserImpl.createBox(PropertyBoxParserImpl.java:86)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coremedia.iso.AbstractBoxParser.parseBox(AbstractBoxParser.java:102)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.googlecode.mp4parser.BasicContainer.next(BasicContainer.java:155)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.googlecode.mp4parser.BasicContainer.hasNext(BasicContainer.java:131)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.googlecode.mp4parser.util.LazyList$1.hasNext(LazyList.java:55)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coremedia.iso.IsoFile.getMovieBox(IsoFile.java:109)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:48)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.googlecode.mp4parser.authoring.container.mp4.MovieCreator.build(MovieCreator.java:35)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coderzheaven.pack.CustomCameraActivity.MergeVideos(CustomCameraActivity.java:200)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coderzheaven.pack.CustomCameraActivity$1.onClick(CustomCameraActivity.java:108)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at android.view.View.performClick(View.java:3517)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at android.view.View$PerformClick.run(View.java:14155)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at android.os.Handler.handleCallback(Handler.java:605)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at android.os.Handler.dispatchMessage(Handler.java:92)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at android.os.Looper.loop(Looper.java:137)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at android.app.ActivityThread.main(ActivityThread.java:4666)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at java.lang.reflect.Method.invokeNative(Native Method)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at java.lang.reflect.Method.invoke(Method.java:511)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at dalvik.system.NativeStart.main(Native Method)
  08-18 17:32:20.571: E/AndroidRuntime(31446): Caused by: java.lang.NoClassDefFoundError: org.aspectj.runtime.reflect.Factory
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coremedia.iso.boxes.FileTypeBox.ajc$preClinit(FileTypeBox.java:1)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  at com.coremedia.iso.boxes.FileTypeBox.<clinit>(FileTypeBox.java:1)
  08-18 17:32:20.571: E/AndroidRuntime(31446):  ... 24 more

【问题讨论】:

    标签: android video mp4parser


    【解决方案1】:

    当您自己构建 mp4parser 时,您没有调用 aspectJ 编译器/编译时编织。请使用预编译版本——它们在maven central 上可用——或者确保调用编译时编织。

    Sonatype OSS staging repositories 中提供了比 Maven Central 更新的版本。在存储库选项卡的标题中,请选择“Nexus Managed Repositories”(而不是 User Managed Repositories)并搜索 mp4parser。

    如果您不使用 maven 或 gradle 等依赖项管理工具,请同时确保包含 AspectJ runtime jar(目前为 1.8.0 版)。

    格吕瑟, 塞巴斯蒂安

    【讨论】:

    • 请在您的回答中查看关于我的发现的已编辑问题。
    • 如果有任何可以合并两个视频的示例可编译项目,请告诉我。
    • 添加了 aspectJ 依赖的解释
    • 现在它正在工作,我现在可以合并两个视频。谢谢@Sebastian
    • 我已经添加了 AspectJ 并且也为我工作,非常感谢。但是,如果我不添加模块独立性,我会得到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多