Java-GStreamer 的处理问题
Java-Processing Issue with GStreamer
我正在使用带有 Processing 插件的 Processing 3.0 and/or Eclipse。
我正在尝试 upload/play 使用基于 GStreamer
的处理视频库制作视频。
当我 运行 Processing 和 Eclipse 中的草图时,一切正常。但是如果我导出应用程序,视频功能不适用于 windows 版本(OSX 版本可以正常使用)。
日志如下:
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.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
,我们也将不胜感激。
谢谢!
男.
这样想:GStreamer 库有两个依赖项:Java 代码和本机代码。
您在类路径中包含 Java 代码方面。由于您要从 eclipse 中导出 运行nable jar,因此该类路径会包含在您导出的 jar 中。
但是,这不包含本机代码。这通常包含在一个单独的文件中(通常是一个 .dll
文件),并且 eclipse 不知道如何将它自动包含在导出中。
由于直接指向本机库文件的设置,或者因为代码正在已知位置寻找本机文件,因此从 eclipse 和 Processing 运行正常 运行。但是当您将其导出为 jar 时,这些设置将丢失。
所以,你需要弄清楚GStreamer原生库文件在哪里。然后你要么需要确保它在正确的位置(也许在罐子旁边?),要么你需要 运行 启用 -Djava.library.path="path/to/your/native.lib"
设置的罐子。
一旦你开始工作,你可以使用像 JarMatey 这样的工具来创建一个自解压 jar 来为你处理这个步骤。 (注:我是 JarMatey 的作者。)
我正在使用带有 Processing 插件的 Processing 3.0 and/or Eclipse。
我正在尝试 upload/play 使用基于 GStreamer
的处理视频库制作视频。
当我 运行 Processing 和 Eclipse 中的草图时,一切正常。但是如果我导出应用程序,视频功能不适用于 windows 版本(OSX 版本可以正常使用)。
日志如下:
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.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
,我们也将不胜感激。
谢谢!
男.
这样想:GStreamer 库有两个依赖项:Java 代码和本机代码。
您在类路径中包含 Java 代码方面。由于您要从 eclipse 中导出 运行nable jar,因此该类路径会包含在您导出的 jar 中。
但是,这不包含本机代码。这通常包含在一个单独的文件中(通常是一个 .dll
文件),并且 eclipse 不知道如何将它自动包含在导出中。
由于直接指向本机库文件的设置,或者因为代码正在已知位置寻找本机文件,因此从 eclipse 和 Processing 运行正常 运行。但是当您将其导出为 jar 时,这些设置将丢失。
所以,你需要弄清楚GStreamer原生库文件在哪里。然后你要么需要确保它在正确的位置(也许在罐子旁边?),要么你需要 运行 启用 -Djava.library.path="path/to/your/native.lib"
设置的罐子。
一旦你开始工作,你可以使用像 JarMatey 这样的工具来创建一个自解压 jar 来为你处理这个步骤。 (注:我是 JarMatey 的作者。)