我如何在ADT项目中使用ffmpeg4android



我使用sourceforge上的项目FFmpeg4Android来构建FFmpeg .so共享库文件。但是,我在ADT Java应用程序中使用它们时遇到了麻烦。我创建了一个简单的JNI调用,试图调用av_register_all,我得到库错误。

当我在我的Nexus 7上运行应用程序时,我被告知它无法加载库libavformat-HEAD-1.0.so

所以我试着通过系统加载这个。loadLibrary方法,我找不到libavcodec-HEAD-1.0.so。以这种方式工作,我最终尝试加载libavutil-HEAD-1.0。这就产生了一个错误'cannot locate symbol "__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)"。

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

让构建的共享库在我的设备上工作的关键是在与它兼容的较旧的NDK上构建源代码。我试图在最新的源代码上构建它,但没有成功。

这里是我和帮助我解决这个问题的开发人员讨论的链接。

最新更新