2013-02-20 149 views
3

我正在設計這個Java web小應用程序通過視頻服務器通過RTSP流視頻。爲了渲染此視頻,將使用Xuggler 5.4庫(xuggle-xuggler.jar)。目前,當我在Windows XP和Ubuntu 10.04機器上運行視頻時,視頻正常渲染。當我嘗試在Windows 7上運行,但是,我得到以下錯誤:無法加載Xuggle庫: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 
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%,但是當我這樣做時,視頻仍然無法呈現,並且錯誤消失(此時,我不確定發生了什麼)。我也試着運行通過的Dependency Walker xuggle-5.dll,但我得到的是與IESHIM.dll一個錯誤顯示在下面的截圖:

enter image description here

當然,同樣的錯誤與我在Windows XP和Ubuntu 10.04機器上運行IESHIM.dll時發生。

我還有用於啓動Web小程序的HTML文檔中引用的xuggle-xuggler.jar文件。

在這一點上,我真的不知道爲什麼Xuggler無法在我的Windows 7(32位)計算機上運行,​​我專門用於開發。任何關於此事的幫助將不勝感激。作爲一個說明,我正在嘗試運行Xuggle網站上提供的Xuggle 5.4(它不應該要求與以前版本的Xuggle不同)的GPL版本。

這裏是我的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> 
+0

*「我還在用於啓動Web小程序的HTML文檔下引用了xuggle-xuggler.jar文件。」*顯示HTML或鏈接到我們可以看到它的位置。 – 2013-02-20 16:23:13

+0

作爲一邊。使用JNLP爲applet部署本機很容易。 – 2013-02-20 16:24:19

+0

@Andrew Thompson:我添加了一段我用來嵌入Java web applet的HTML代碼。 – Justin 2013-02-20 17:09:09

回答

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文件的緩存副本,這可能是從哪裏來的一箇舊的Xuggle JAR存檔,我曾在兩個月前用它來實驗Java applet視頻輸出。考慮到臨時目錄(C:\Users\Justin\AppData\Local\Temp\xuggle\xuggle8376027568348573783.dll)中引用的DLL文件與通過Dependency Walker應用程序進行驗證時從最近的xuggle-xuggler-5.4.jar中提取的最新xuggle DLL文件相比具有不同的依賴關係,因此我們能夠得出這一結論以上。

因此,當我嘗試在我的Java Web Applet中顯示視頻時,Java運行時環境將嘗試訪問此老化的Xuggle DLL文件,而不是從xuggle-xuggler-5.4.jar中加載DLL文件。因此,發生了上述java.lang.UnsatisfiedLinkError

爲了迫使Java運行時環境,從DLL文件內的從內xuggle-xuggler-5.4.jar加載DLL文件,被執行了以下步驟:

  1. 打開Java控制面板。在Windows中,這是通過進入開始菜單並訪問控制面板完成的。如果安裝了Java運行時環境,Java應作爲Windows控制面板中的一個選項出現。點擊Java。

  2. 一旦進入Java控制面板中的常規選項卡下Temporary Internet Files下,單擊設置...按鈕。

  3. 取消選中「在我的計算機上保留臨時文件」複選框。

  4. 然後單擊刪除文件按鈕並刪除所有臨時文件(選中所有複選框)。根據您的偏好設置,您可能只想選擇這些複選框的一個子集,儘管我將它們全部選中。

  5. 單擊確定。然後再次單擊確定。然後再次單擊確定關閉Java控制面板。

  6. 如果它打開並嘗試重新啓動Java Web Applet,請關閉您的Web瀏覽器。如果這是您遇到的問題,那麼java.lang.UnsatisfiedLinkError應該不再出現,並且應該正確顯示視頻,前提是您的代碼是正確的,並且您已加載了正確的Xuggle JAR以及Xuggle的依賴關係。就我而言,我的Web小應用程序JAR簡單地放置在與用於將其嵌入Web瀏覽器的HTML文件相同的目錄中,以及所有必需的Xuggle JAR和Xuggle依賴性JAR。

應當指出的是,Java運行時環境在Ubuntu也有Java的控制面板看起來類似於一個在Windows和可以執行類似的步驟在Ubuntu來解決這個問題,如果這個問題曾經出現。

如果您只是直接在Web瀏覽器中打開HTML文件,上述解決方案應該可以工作。如果您在使用Apache Tomcat或Glassfish的部署你的Web小型應用程序,這可能無法正常工作 - 在這種情況下,你可能需要參考該方案,雖然我還沒有徹底測試它自己:

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

相關問題