Разработка с помощью LibVLC для Android в Windows

Я изо всех сил пытался получить демонстрационное приложение с Android-LibVLC.

Я могу найти документацию для Linux и не могу заставить приложение работать на моем устройстве (хотя оно компилируется).

Когда я запускаю приложение, он записывает:

12-16 15:58:19.572    9121-9121/? E/VLC/LibVLC﹕ Can't load vlcjni library: java.lang.UnsatisfiedLinkError: Couldn't load vlcjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.compdigitec.libvlcandroidsample-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.compdigitec.libvlcandroidsample-1, /vendor/lib, /system/lib]]]: findLibrary returned null
12-16 15:58:19.667    9135-9135/com.compdigitec.libvlcandroidsample E/VLC/LibVLC﹕ Can't load vlcjni library: java.lang.UnsatisfiedLinkError: Couldn't load vlcjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.compdigitec.libvlcandroidsample-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.compdigitec.libvlcandroidsample-1, /vendor/lib, /system/lib]]]: findLibrary returned null

Я скомпилировал проект APK с классами каталога org.videolan.libvlc как частью корня источника и с jni-каталогом в том же модуле и не смог, я также включил весь модуль VLC в качестве отдельной библиотеки модуль и сделал его зависимым, это также не удалось.

Есть ли у кого-нибудь проверенный метод настройки/сборки проекта Android с помощью LibVLC, из окон? Или ссылку на инструкции/документацию? (Я ничего не смог найти).

Цель состоит в том, чтобы заменить мои зависимые классы на основе android MediaPlayer на библиотеку/реализацию, которая поддерживает больше типов файлов/кодеков.

Ответ 1

При построении в окнах ваше предупреждение будет предупреждать "Android.mk:iomx-hc: non-system libraries in linker flags: -lgcc -lstagefright - lmedia -lbinder", вы получите их для нескольких файлов. И он также предупреждает "Android NDK:This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES" Поэтому, даже если вы получите вывод сборки, у него не будет необходимых файлов. И, следовательно, вы получаете сообщение об ошибке при запуске приложения.

Теперь, если вы посмотрите на Android.mk, вы найдете

include $(CLEAR_VARS)

LOCAL_MODULE     := libiomx-gingerbread
LOCAL_SRC_FILES  := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_GINGERBREAD)/frameworks/base/include $(ANDROID_SYS_HEADERS_GINGERBREAD)/system/core/include
LOCAL_CFLAGS     := -Wno-psabi
LOCAL_LDLIBS     := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder

include $(BUILD_SHARED_LIBRARY)

Я загрузил источник vlc из здесь и после извлечения источника я смог найти "extract_path" \ vlc-2.1.4\модули\кодек\omxil\iomx.cpp. Поэтому, если вы можете изменить путь включения для VLC_SRC_DIR в каталог, в котором источник vlc извлечен на машине WINDOWS, я думаю, вы должны скомпилировать его. Если вы не используете виртуальную машину, использующую linux для компиляции проекта. Также необходимы библиотеки архивов (.a), которые вы не найдете в источнике vlc. Таким образом, вам нужно будет сначала создать источник vlc, а затем включить все материалы в проект. Я думаю, что Linux на виртуальной машине - ваш лучший выбор.

Ответ 2

Интересный проект. Ошибка Unsatisfied Link обычно означает, что Собственная библиотека (вероятно, общий объект или что-то еще) не найдена. Вы запустили "ndk-build" из Android NDK в папке "jni" проекта?

Вы также сказали, что вы добавили Java-источники из Библиотечного проекта в Java источники. Вероятно, это неправильный способ сделать это. Рассмотрим это:

  • В основе этих Java-классов лежит JNI-код, написанный на C/С++. То, что вы хотите достичь, заключается в том, что этот так называемый собственный код скомпилирован в объект библиотеки, который можно загрузить/запустить на Android. С этой целью обычно записывает файл Android.mk, расположенный в папке "JNI", и запускает "ndk-build" для строить эти источники.
  • В Java должен быть некоторый код Wrapper/Binding, который вызывает те собственные функции C/С++. Связывание Java-вызовов с C-функции выполняются именами пакетов и классов. Таким образом, если вы двигаетесь вокруг кода, вы, вероятно, уничтожите эти привязки. Если только ты не знаете, что вы делаете, я бы поэтому рекомендовал, чтобы вы ушли такой проект библиотеки Android, как есть и просто включать проект в ваш проект приложения через свойства → Android от Затмение.

Кроме того, вы можете проверить этот проект. https://github.com/fscz/FFmpeg-Android