2016-02-17 115 views
0

我正在使用处理3.0和/或Eclipse与Processing插件。 我正在尝试使用基于GStreamer的处理视频库上传/播放视频。 当我在Processing和Eclipse中运行草图时,一切都很顺利。但是,如果我导出应用程序,视频功能不适用于Windows版本(OSX的工作正常)。GStreamer的Java处理问题

日志去如下:

Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: Could not load library: gstreamer 
at org.gstreamer.lowlevel.GstNative.load(GstNative.java:53) 
at org.gstreamer.lowlevel.GstNative.load(GstNative.java:43) 
at org.gstreamer.Gst.<clinit>(Gst.java:101) 
at processing.video.Video.initImpl(Unknown Source) 
at processing.video.Video.init(Unknown Source) 
at processing.video.Movie.initGStreamer(Unknown Source) 
at processing.video.Movie.<init>(Unknown Source) 
at Shot_Position_Video.draw(Shot_Position_Video.java:259) 
at processing.core.PApplet.handleDraw(PApplet.java:2402) 
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1527) 
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316) 

这是我上传的视频线:

at Shot_Position_Video.draw(Shot_Position_Video.java:259) 

代码:

myMovie = new Movie(this, Video_address); 

任何想法?我遇到了很多有关jna.jar和其他一些内容的部分解决方案,但是我无法找到解决这个问题的方法。

甚至建议其他图书馆使用,而不是Gstreamer将不胜感激。

谢谢!

M.

+0

你是如何导出应用程序?该输出的结果是什么(什么类型的文件)?你如何运行该文件? –

+0

嗨凯文!这个日志来自我从eclipse得到的可执行文件.jar文件。如果我直接从处理中导出,那么我有两种不同的行为:如果我使用相同的操作系统导出应用程序,那么它可以工作。如果我从Mac出口到Win,它不会。 – MBerra

回答

1

想想这样说:GStreamer库有两个依赖:Java代码和本地代码。

您在类路径中包含Java代码方面。既然你从eclipse中导出一个可运行的jar,那么这个classpath会被包装在你导出的jar中。

但是,这确实包含本机代码而不是。这通常包含在一个单独的文件中(通常是.dll文件),并且eclipse不知道如何自动将其与导出一起引入。

它可以正常运行在eclipse和Processing中,因为直接指向本机库文件的设置,或者代码正在寻找已知位置的本机文件。但是,当您将它作为jar导出时,这些设置会丢失。

因此,您需要确定GStreamer本机库文件的位置。那么你需要确保它位于正确的位置(也许在罐子旁边?),或者你需要运行罐子并启用-Djava.library.path="path/to/your/native.lib"设置。

一旦你得到这个工作,你可以使用像JarMatey这样的工具来创建一个自解压的jar来为你处理该步骤。 (注:我是JarMatey的作者。)

+0

感谢Kevin,我预编译了这个库并添加了它(win和osx),现在它可以工作了! – MBerra