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