построить vp8 на андроид - PullRequest
6 голосов
/ 03 октября 2011

Я пытаюсь собрать кодек vp8 для Android. Я запустил скрипт configure.sh и make-файл для armv6 с исходным кодом g ++, который успешно создал libvpx.so. После этого я написал оболочку JNI и успешно скомпилировал ее с помощью ndk-build. Когда я запускаю это на смартфоне Gingerbread, я получаю UnsatisfiedLinkError «libpthread.so.0 not found». Как я могу избавиться от этой ошибки?

Ответы [ 2 ]

9 голосов
/ 19 июня 2013

С http://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android с некоторыми настройками для удобочитаемости.

  1. Создать папку {проект} / jni.

  2. Получить привязки JNI.

    мерзавец клон https://chromium.googlesource.com/webm/bindings

  3. Получить libvpx.

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

  4. Настройка libvpx для Android

    . / Libvpx / configure --target = armv7-android-gcc --disable-examples --sdk-path = {путь к NDK}

    --sdk-path ДОЛЖЕН быть абсолютным.

  5. Получить libwebm.

    CD-привязки / JNI

    мерзавец клон https://chromium.googlesource.com/webm/libwebm

  6. Получить libogg.

    Скачать ogg код с http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz

    Извлечение в привязки / 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

    Извлечение в привязки / JNI.

  9. Получить libyuv

    svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv-только для чтения

  10. Создать {проект} /jni/Application.mk с данными ниже:

    APP_ABI := armeabi-v7a
    APP_OPTIM := release
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
  11. Создать {проект} /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.

0 голосов
/ 25 января 2012

Иногда это может быть проблемой с SONAME в общей библиотеке, посмотрите эту статью.

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

Вы можете отключить pthreads, если они вам действительно не нужны.

В прошлом у меня были проблемы с файлами .so, и все эти проблемы удалось избежать, используя статические библиотеки .a вместо общих библиотек .so

...