我使用 sourceforge 上的 FFmpeg4Android 项目来构建 FFmpeg .so 共享库文件。但是,我无法在 ADT Java 应用程序中使用它们。我创建了一个尝试调用 av_register_all 的简单 JNI 调用,但出现库错误。
当我在 Nexus 7 上运行应用程序时,我被告知它无法加载库 libavformat-HEAD-1.0.so
所以我尝试通过 System.loadLibrary 方法加载它,但我无法找到 libavcodec-HEAD-1.0.so。以这种方式返回,我最终尝试加载 libavutil-HEAD-1.0.so,这产生了错误“无法找到符号“__strchr_chk””。
这是我的 Java 类:
public class LibavcodecTest {
public static native void avRegisterAll();
static {
System.loadLibrary("avutil-HEAD-1.0");
System.loadLibrary("avcodec-HEAD-1.0");
System.loadLibrary("avformat-HEAD-1.0");
System.loadLibrary("LibavcodecTest");
}
}
更新
我联系了维护 ffmpeg4android 的开发人员,他能够指导我将我正在构建的 android 源代码的版本更改为与我的设备相同的版本,该设备可以让我成功调用 av_register_all。
但是,现在我在调用 avformat_open_input 时收到“致命信号 11 (SIGSEGV)”的崩溃。
我在网上的搜索让我相信这是一个内存访问问题。有谁知道这是否可以通过以不同方式加载共享库来解决?