[英]Using openssl with FFmpeg on Android with NDK
我使用 Guardian 项目中的脚本交叉编译了支持 openssl 的 FFmpeg,但是每当我执行以下操作时,我的代码就会崩溃:
System.loadLibrary("crypto"); // loads OK
System.loadLibrary("ssl"); // loads OK
System.loadLibrary("avformat"); // crashes
错误:
dlopen("/data/data/wseemann.media.demo/lib/libavformat.so") failed: dlopen failed: cannot locate symbol "SSL_library_init" referenced by "libavformat.so"...
我使用工具链构建 libavformat,然后使用以下 Android.mk 文件运行 ndk-build 以创建 .so 文件:
LOCAL_PATH := $(call my-dir)
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)
似乎 libavformat 在加载时需要 libcrypto 和 libssl 但找不到它们或没有加载它们。 有谁知道如何解决这个问题?
问题是通常在/system/lib
中有libssl.so
。 加载程序System.loadLibrary()首选使用该路径到您的应用程序lib目录( /data/data/your.package.name/lib
),这可能会引起混乱。 最简单的解决方法是改为使用System.load(“ / data / data / your.package.name / lib / libssl.so”) (也有正确的方法来获取路径)。
另一个解决方法是将您准备的libssl.so
重命名为libavssl.so
,然后调用System.loadLibrary("avssl")
。 请注意, 也许您可能需要重新编译libavformat
才能查找libavssl.so
。
这在 FFmpegMediaPlayer.java 第 614 行对我有用:
static {
System.loadLibrary("crypto"); // loads OK
System.loadLibrary("ssl"); // loads OK
for (int i = 0; i < JNI_LIBRARIES.length; i++) {
Log.d("TAG", JNI_LIBRARIES[i]);
System.loadLibrary(JNI_LIBRARIES[i]);
}
native_init();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.