2013-02-20 69 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

相关问题