2013-12-16 4 views
10

Я изо всех сил пытался получить demo application, работающий с Android-LibVLC.Разработка с LibVLC для Android для Windows

Я могу найти только documentation для 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.тк вы найдете

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 из here и после извлечения источника я смог найти «extracted_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 источников. Вероятно, это неправильный способ сделать это. Рассмотрим следующее:

  1. В основе этих Java-классов лежит JNI-код, написанный на C/C++. Что вы хотите достичь, так это то, что этот так называемый собственный код скомпилирован в объект библиотеки, который можно загрузить/запустить на Android. Для этого обычно записывает файл Android.mk, расположенный в папке «JNI», и запускает «ndk-build» до , создавая эти источники.
  2. В Java должен быть некоторый код Wrapper/Binding, который вызывает те родные функции C/C++. Связывание Java-вызовов с С-функциями выполняются имена пакетов и классов. Таким образом, если вы перемещаете вокруг кода, вы, вероятно, уничтожите эти привязки. Если вы не знаете, что вы делаете, я бы рекомендовал, чтобы вы оставили такой проект библиотеки Android, как есть и просто включите проект в свой проект приложения через Свойства -> Android от Eclipse.

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

+0

Я использую эту библиотеку медиафайлов на основе ffmpeg: https://github.com/wseemann/FFmpegMediaPlayer. У него есть готовые библиотеки, поэтому его легко начать или вы можете скомпилировать их. –

+0

К сожалению, ничто из этого не помогает, поскольку мы уже предприняли шаги, в том числе используя исходный код as-is как проект библиотеки: (но спасибо вам за очень хорошо продуманный ответ –

+1

Сообщение об ошибке «Невозможно загрузить библиотеку vlcjni» четко указывает, что объект библиотеки не найден. Убедитесь, что внутри папки «libs» в библиотечном проекте есть папки «arm-v7a» «arm», и т. д., и что они содержат файл libvlcjni.so. Обычно это достигается за счет запуска ndk-build изнутри jni-папки. Успешно ли выполняется сборка? Не забывайте обновлять проект после этого, а затем обновляйте проект, который зависит на проект библиотеки и запустить/запустить приложение. – fabian

Смежные вопросы