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 を正常に呼び出せるように機能するデバイスと同じバージョンに変更するように指示することができました。

ただし、「Fatal signal 11 (SIGSEGV)」を受け取る avformat_open_input を呼び出してクラッシュするようになりました。

Web で検索すると、これはメモリ アクセスの問題であると思われます。共有ライブラリを別の方法でロードすることでこれが解決されるかどうかは誰にもわかりませんか?

4

1 に答える 1

2

ビルドされた共有ライブラリをデバイスで動作させるための鍵は、それと互換性のある古い NDK でソースをビルドすることでした。最新のソースでビルドしようとしましたが、うまくいきませんでした。

これは、解決を手伝ってくれた開発者とのディスカッションへのリンクです。

于 2013-01-16T20:46:55.220 に答える