在android上构建vp8

时间:2011-10-03 11:32:42

标签: android vp8

我正在尝试为Android构建vp8编解码器。我使用sourcery g ++运行了configure.sh脚本和armv6的makefile,它成功地生成了libvpx.so。之后我编写了一个JNI包装器并使用ndk-build成功编译它。当我在Gingerbread智能手机上运行时,我得到了一个UnsatisfiedLinkError“找不到libpthread.so.0”。我怎样才能摆脱这个错误?

2 个答案:

答案 0 :(得分:9)

来自http://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android并进行了一些可读性调整。

  1. 创建{project} / jni文件夹。

  2. 获取JNI绑定。

      

    git clone https://chromium.googlesource.com/webm/bindings

  3. 获取libvpx。

      

    git clone https://chromium.googlesource.com/webm/libvpx

  4. 为Android配置libvpx

      

    ./ libvpx / configure --target = armv7-android-gcc --disable-examples --sdk-path = {NDK的路径}

    --sdk-path必须是绝对的。

  5. 获取libwebm。

      

    cd bindings / JNI

         

    git clone https://chromium.googlesource.com/webm/libwebm

  6. 获取libogg。

      

    http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz下载ogg代码

         

    提取到绑定/ JNI。

  7. 我们需要运行configure来生成config_types.h。

      

    cd libogg-1.3.0&& ./configure&& cd ..

  8. 获取libvorbis

      

    http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz

    下载vorbis代码      

    提取到绑定/ JNI。

  9. 获取libyuv

      

    svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv-read-only

  10. 使用以下数据创建{project} /jni/Application.mk:

    APP_ABI := armeabi-v7a
    APP_OPTIM := release
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
  11. 使用以下数据创建{project} /jni/Android.mk:

    WORKING_DIR := $(call my-dir)
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI
    include $(BINDINGS_DIR)/Android.mk
    
  12. 构建JNI代码。

      

    {NDK路径} / ndk-build

  13. 复制java代码。

      

    cp -R bindings / JNI / com / google ../ src / com /

  14. 添加代码以测试绑定。

    int[] major = new int[2];
    int[] minor = new int[2];
    int[] build = new int[2];
    int[] revision = new int[2];
    MkvMuxer.getVersion(major, minor, build, revision);
    String outStr = "libwebm:" +
                    Integer.toString(major[0]) + "." +
                    Integer.toString(minor[0]) + "." +
                    Integer.toString(build[0]) + "." +
                    Integer.toString(revision[0]);
    System.out.println(outStr);
    
  15. 运行该应用。您应该看到libwebm版本输出。

  16. 根据需要调整。 VP8包装器位于com.google.libvpx命名空间中。

答案 1 :(得分:0)

这有时可能是共享库中SONAME的问题,请看这篇文章。

http://groups.google.com/group/android-ndk/browse_thread/thread/fd484da512650359

如果你真的不需要,你可以禁用pthreads。

我以前遇到.so文件的问题,并通过使用.a静态库而不是.so共享库来避免所有这些问题