簡體   English   中英

Android NDK中的FFMPEG-無法加載庫“ libavfilter.so”

[英]FFMPEG in Android NDK - could not load library “libavfilter.so”

我正在嘗試使用FFMPEG使用Android NDK裁剪視頻。 我可以成功構建ffmpeg,但libavfilter出現問題。 一旦將其包含在Android.mk的LOCAL_SHARED_LIBRARIES中,便會收到以下UnsatisfiedLinkError:

java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libavfilter.so" needed by "videocrop.so"; caused by cannot locate symbol "avcodec_find_best_pix_fmt_of_2" referenced by "libavfilter.so"...
        at java.lang.Runtime.loadLibrary(Runtime.java:371)
        at java.lang.System.loadLibrary(System.java:989)

(我正在嘗試使用System.loadLibrary在Java端的靜態初始化程序中加載我的庫)。

libavcodec / avcodec.h中存在“ avcodec_find_best_pix_fmt_of_2”函數,因此我不知道為什么找不到它。 libavfilter.so文件(以及所有其他庫)似乎正在構建中,並且位於libs /文件夾中。 我嘗試過編輯FFMPEG配置和重建,還嘗試過更改Android.mk中的LOCAL_C_INCLUDES以包括libavcodec的頭文件,但沒有任何運氣。

這是我的模塊的Android.mk:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := videocrop
LOCAL_CFLAGS :=
LOCAL_SRC_FILES := VideoCrop.c
    LOCAL_C_INCLUDES += $(LOCAL_PATH)/../ffmpeg/ffmpeg/$(TARGET_ARCH)/include/libavcodec/
    LOCAL_SHARED_LIBRARIES := libavformat libavutil libavcodec libavfilter

    LOCAL_LDLIBS := -llog
    LOCAL_LDFLAGS +=-ljnigraphics

    include $(BUILD_SHARED_LIBRARY)

這是我的ffmpeg庫本身的Android.mk,盡管它非常簡單:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libavfilter
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libswscale
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libavformat
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libavutil
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_PATH:= $(call my-dir)

我機智的結束了。 如果有人有任何想法,將不勝感激。

您需要以相反的依賴關系順序加載庫,例如:

System.loadLibrary("avutil");
System.loadLibrary("avcodec");
System.loadLibrary("avformat");
System.loadLibrary("swscale");
System.loadLibrary("avfilter");
System.loadLibrary("videocrop");

請參閱此帖子,了解更多詳細信息: 加載依賴於其他共享庫的共享庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM