3

libvlc を使用してビデオを再生し、Java でクロスプラットフォーム アプリを作成しようとしています。Web をよく検索してきましたが、使用しているプラ​​ットフォーム (Mac、Win、Linux – 32 ビットまたは 64 ビット) で libvlc を個別にロードするコードは見つかりませんでした。JNA ライブラリを使用して libvlc をロードします。

たとえば、これは Mac のデフォルトのインストール パスから libvlc をロードするコードです。

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "/Applications/VLC.app/Contents/MacOS/lib/");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

しかし、ユーザーが VLC.app のインストール パスを変更するとどうなるでしょうか?!

そのため、パスに依存しない、クロスプラットフォームの読み込みコードを作成する必要があります。一般に、libvlc ライブラリを含むフォルダーへのパスを取得する場所がわかりません。

アイデアをありがとう。

4

2 に答える 2

2

私は通常、 や など、よく知られている場所を検索し/Applications/VLC.app/Contents/MacOS/lib/ますProgram Files/VideoLan/VLC/sdk/lib

一般的に知られている場所を検索してもライブラリが見つからない場合は、ユーザーに場所を提供するように求める必要があります...

また、バイナリをバンドルして実行時にエクスポート/インストールする機能を持つvlcjも使用しています (これは、アプリケーションのサイズをかなり大きくするため、少し厳しすぎる可能性があります)。

于 2012-09-20T20:21:19.967 に答える
2

ご協力いただきありがとうございますが、より良い解決策を見つけました。VLCJ の javadoc を数時間読んだ後、これらすべての共通パスが既に保存されている NativeDiscovery クラスに気付きました。

private void setupLibVLC() throws LibraryNotFoundException {

    new NativeDiscovery().discover();

    // discovery()'s method return value is WRONG on Linux
    try {
        LibVlcVersion.getVersion();
    } catch (Exception e) {
        throw new LibraryNotFoundException();
    }
}

このソリューションの唯一の短所は、ユーザーが VLC をカスタムの場所にインストールした場合でも、ライブラリの場所を彼に尋ねなければならないことです。

于 2012-09-22T17:35:01.537 に答える