1

我正在尝试让 JavaCV 为 android 工作,以便使用 FFMPEG 库。我正在按照我在下面复制的 JavaCV网站上的 android 设置说明进行操作:

Eclipse(Android 2.2 或更高版本):按照此页面上的说明进行操作:http: //developer.android.com/training/basics/firstapp/ 转到文件 > 新建 > 文件夹,选择您的项目作为父文件夹,键入“libs/ armeabi”作为文件夹名称,然后单击完成。将 javacpp.jar 和 javacv.jar 复制到新创建的“libs”文件夹中。将 javacv-android-arm.jar、opencv-2.4.3-android-arm.zip 和 ffmpeg-1.0-android-arm.zip 中的所有 *.so 文件直接提取到新创建的“libs/armeabi”文件夹中,不创建任何新的子目录。导航到项目 > 属性 > Java 构建路径 > 库,然后单击“添加 JAR...”。从新创建的“libs”文件夹中选择 javacpp.jar 和 javacv.jar。

我正在尝试在我的代码中使用 FFmpegFrameGrabber 类。当我运行时,我从 logcat 收到此错误:

02-01 14:40:35.550: W/dalvikvm(11583): 异常 Ljava/lang/UnsatisfiedLinkError; 初始化 Lcom/googlecode/javacv/cpp/avutil 时抛出;

02-01 14:40:35.550: W/dalvikvm(11583): 异常 Ljava/lang/ExceptionInInitializerError; 初始化 Lcom/googlecode/javacv/cpp/avcodec 时抛出;

02-01 14:40:35.550: D/AndroidRuntime(11583): 关闭 VM

02-01 14:40:35.550: W/dalvikvm(11583): threadid=1: 线程以未捕获的异常退出 (group=0x40015560)

这让我相信我的 android 应用程序找不到我放在 libs/armeabi 文件夹中的 avutil.so 和 avcodec.so。但是,当我解压缩生成的 APK eclipse 时,两个 so 文件都存在。

关于这个问题的原因有什么想法吗?

4

1 回答 1

0

对于遇到此问题的任何人,我都设置了一个Gist,提供有关如何在 Android Studio 2.1.1 上设置 JavaCV 1.1 的分步说明。

本教程将使用 JavaCV 1.1,版本 1.2 目前有SIGSEGV 问题。JavaCV 1.1 附带 FFmpeg 2.8.1。

  1. 在此处获取预编译二进制文件。
  2. 解压并复制这些文件:
    • javacpp.jar必不可少)。
    • javacv.jar必不可少)。
    • ffmpeg.jar如果您使用 FFmpeg 则必不可少)。
    • ffmpeg-android-arm.jar(用于 arm CPU)。
    • ffmpeg-android-x86.jar(x86 CPU 可选)。进入libs您的项目文件夹(app/libs在我的情况下)。
  3. 单击app-> F4-> Dependencies-> +-> File dependencies-> 选择所有以前的.jar
  4. 由于这个问题,我们暂时需要设置targetSdkVersion 22应用程序的build.gradle.
  5. 可能需要在 中设置packagingOptions这些build.gradle

android { compileSdkVersion 23 buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.example.test"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}

packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
    exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'

    //might need these if you use openCV
    //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
    //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
}

}

于 2016-05-25T04:00:37.963 回答