1

我使用 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)”的崩溃。

我在网上的搜索让我相信这是一个内存访问问题。有谁知道这是否可以通过以不同方式加载共享库来解决?

4

1 回答 1

2

让构建的共享库在我的设备上运行的关键是在与之兼容的旧 NDK 上构建源代码。我试图在最新的源代码上构建它,但没有奏效。

这是我与帮助我解决它的开发人员进行的讨论的链接。

于 2013-01-16T20:46:55.220 回答