3

このJavaWebアプレットは、ビデオサーバーからRTSP経由でビデオをストリーミングするように設計しています。このビデオをレンダリングするために、Xuggler 5.4ライブラリ(xuggle-xuggler.jar)が使用されます。現在、WindowsXPおよびUbuntu10.04マシンでビデオを実行すると、ビデオは正しくレンダリングされます。ただし、Windows 7で実行しようとすると、次のエラーが発生します。

10:10:13.370 [Thread-13] WARN  com.xuggle.ferry.JNILibrary - Failure: library load of library: xuggle; url: C:\Users\Justin\AppData\Local\Temp\xuggle\xuggle8376027568348573783.dll; error: java.lang.UnsatisfiedLinkError: C:\Users\Justin\AppData\Local\Temp\xuggle\xuggle8376027568348573783.dll: Can't find dependent libraries
10:10:13.448 [Thread-13] ERROR com.xuggle.ferry.JNILibraryLoader - Could not load library: xuggle; version: 5; Visit http://www.xuggle.com/xuggler/faq/ to find common solutions to this problem
Exception in thread "Thread-13" java.lang.UnsatisfiedLinkError: no xuggle in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at com.xuggle.ferry.JNILibraryLoader.loadLibrary0(JNILibraryLoader.java:268)
    at com.xuggle.ferry.JNILibraryLoader.loadLibrary(JNILibraryLoader.java:171)
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:161)
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16)
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25)
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19)
    at com.xuggle.xuggler.ICodec$ID.<clinit>(ICodec.java:760)
    at com.ioindustries.videoserver.RtpSession.run(RtpSession.java:86)
    at java.lang.Thread.run(Unknown Source)

を抽出xuggle-5.dllしてディレクトリに配置し、webそれをWindows%PATH%、さらにはWindows%CLASSPATH%にリンクしようとしましたが、そうしてもビデオがレンダリングされず、エラーが消えます(その時点で、私は何が起こっているのかわからない)。また、依存関係ウォーカーを介してxuggle-5.dllを実行しようとしましたが、以下のスクリーンショットに示すように、IESHIM.dllでエラーが発生するだけです。

ここに画像の説明を入力してください

もちろん、IESHIM.dllをWindowsXPとUbuntu10.04マシンで実行すると、同じエラーが発生します。

また、Webアプレットの起動に使用されるHTMLドキュメントの下で参照されているxuggle-xuggler.jarファイルがあります。

現時点では、Xugglerが開発に使用しているWindows 7(32ビット)マシンで実行できない理由がよくわかりません。この件に関するご協力をいただければ幸いです。

注意として、私はXuggleWebサイトで入手可能なGPLバージョンのXuggle5.4(以前のバージョンのXuggleとは異なりインストールを必要としないはずです)で実行しようとしています。

これが私のHTMLドキュメントのスニペットです:

<div id="applet_box" class="applet box">
            <applet id="applet" code="com.videoserver.ClientApplet" 
                    archive="VideoServerClient.jar, xuggle-xuggler-5.4.jar, slf4j-api-1.6.4.jar, logback-classic-1.0.0.jar, logback-core-1.0.0.jar" MAYSCRIPT>
            </applet>
        </div>  
4

1 に答える 1

1

私の同僚は、なぜこれjava.lang.UnsatisfiedLinkErrorが起こっているのかを理解したので、すべての功績は彼にあります(私は単なるオブザーバーでした)。

上記のエラーログの最初の行を参照してください。

10:10:13.370 [Thread-13] WARN  com.xuggle.ferry.JNILibrary - Failure: library load of library: xuggle; url: C:\Users\Justin\AppData\Local\Temp\xuggle\xuggle8376027568348573783.dll; error: java.lang.UnsatisfiedLinkError: C:\Users\Justin\AppData\Local\Temp\xuggle\xuggle8376027568348573783.dll: Can't find dependent libraries

基本的に、私の場合に起こったことは、Javaランタイム環境にXuggle DLLファイルのキャッシュコピーがあったことでした。これは、2か月前にJavaアプレットのビデオ出力を実験するために使用した古いXuggleJARアーカイブからのものである可能性があります。上記のDependencyWalkerアプリケーションで検証したときにC:\Users\Justin\AppData\Local\Temp\xuggle\xuggle8376027568348573783.dll、最新のxuggleDLLファイルから抽出された最新のxuggleDLLファイルと比較して、一時ディレクトリ()で参照されるDLLファイルの依存関係が異なるという事実から、この結論に到達することができました。xuggle-xuggler-5.4.jar

その結果、Java Webアプレットでビデオを表示しようとすると、Javaランタイム環境は、からDLLファイルをロードするのではなく、この古いXuggleDLLファイルにアクセスしようとしましたxuggle-xuggler-5.4.jar。したがって、上記java.lang.UnsatisfiedLinkErrorが発生しました。

Javaランタイム環境がDLLファイル内からDLLファイルを内部からロードするように強制するためにxuggle-xuggler-5.4.jar、次の手順が実行されました。

  1. Javaコントロールパネルを開きます。Windowsでは、これは[スタート]メニューに移動してコントロールパネルにアクセスすることで実行されます。Javaランタイム環境がインストールされている場合、JavaはWindowsのコントロールパネルにオプションとして表示されます。「Java」をクリックします。

  2. Javaコントロールパネルが表示されたら、[全般]タブの[インターネット一時ファイル]で、[設定...]ボタンをクリックします。

  3. [一時ファイルをコンピューターに保存する]チェックボックスをオフにします。

  4. 次に、[ファイルの削除]ボタンをクリックして、すべての一時ファイルを削除します(すべてのチェックボックスを選択します)。好みによっては、これらのチェックボックスのサブセットのみを選択したい場合がありますが、私はそれらをすべて選択しました。

  5. [OK]をクリックします。次に、もう一度[OK]をクリックします。次に、[OK]を3回クリックして、Javaコントロールパネルを閉じます。

  6. Webブラウザが開いている場合は閉じて、JavaWebアプレットを再起動してみてください。これが問題であった場合、それjava.lang.UnsatisfiedLinkErrorは発生しなくなり、コードが正しく、正しいXuggle JARとXuggleの依存関係がロードされていることを前提として、ビデオが正しく表示されるはずです。私の場合、WebアプレットJARは、必要なすべてのXuggle JARおよびXuggle依存関係JARとともに、Webブラウザに埋め込むために使用されるHTMLファイルと同じディレクトリに配置されました。

UbuntuのJavaランタイム環境にもWindowsのJavaコントロールパネルと同様のJavaコントロールパネルがあり、問題が発生した場合は、同様の手順を実行してUbuntuでこの問題を解決できることに注意してください。

上記の解決策は、HTMLファイルをWebブラウザで直接開くだけの場合に機能するはずです。Apache TomcatまたはGlassfishを使用してWebアプレットを展開している場合、これは機能しない可能性があります。この場合、私は完全にテストしていませんが、このソリューションを参照することをお勧めします。

http://wiki.xuggle.com/Frequently_Asked_Questions#I_get_an_.22UnsatisfiedLinkError.22_when_I_run_Xuggler-based_Applications_in_Tomcat

于 2013-02-22T02:09:37.740 に答える