Linux中的JavaFX WebEngine视频播放

时间:2014-04-28 21:40:12

标签: java video javafx redhat codec

我们目前在Linux Redhat 6环境中的JavaFX中的WebViewer中开发问题。使用JavaFX 2.2和Java 1.7.0.51,我们有一个WebViewer,它转到一个带有视频标签的HTML页面。

它完全适用于我们的Windows机器,但是在Linux机箱上我们得到以下例外:

Exception in thread "JavaFX Application Thread" java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Thread.java:704)
    at com.sun.webpane.sg.prism.WCMediaPlayerImpl.prepareToPlay(WCMediaPlayerImpl.java:208)
    at com.sun.webpane.platform.graphics.WCMediaPlayer.fwkPrepareToPlay(WCMediaPlayer.java:290)
    at com.sun.webpane.platform.WebPage.twkProcessMouseEvent(Native Method)
    at com.sun.webpane.platform.WebPage.dispatchMouseEvent(WebPage.java:751)
    at javafx.scene.web.WebView.processMouseEvent(WebView.java:983)
    at javafx.scene.web.WebView.access$2600(WebView.java:81)
    at javafx.scene.web.WebView$14.handle(WebView.java:1136)
    at javafx.scene.web.WebView$14.handle(WebView.java:1134)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
    at javafx.event.Event.fireEvent(Event.java:171)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3369)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3209)
    at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3164)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1582)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2267)
    at com.sun.javafx.tk.quantum.EmbeddedScene$2$1.run(EmbeddedScene.java:194)
    at com.sun.javafx.tk.quantum.EmbeddedScene$2$1.run(EmbeddedScene.java:176)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.EmbeddedScene$2.run(EmbeddedScene.java:176)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:182)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:179)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:89)
    at java.lang.Thread.run(Thread.java:744)

我将说明显而易见的,似乎正在尝试加载视频时,JavaFX产生的线程正在消失。还有其他人遇到过这种性质的问题吗?关于尝试什么的任何想法?我们尝试使用非常具体的编解码器版本的H-264,但这没有用。关于如何在JavaFX WebView中为视频播放设置linux / javafx环境的任何想法都会有所帮助。

此外,澄清应用程序是使用嵌入式JavaFX的Swing,但它仍然出现在纯JavaFX实现中,稍有不同的Exception。

谢谢, 森

更新:看起来我们可能没有正确安装编解码器。将在明天更新答案以供将来参考。

1 个答案:

答案 0 :(得分:1)

似乎我们没有正确构建到操作系统中的任何/正确的编解码器,并且它必须是编解码器的一个非常特定的版本。虽然配置不支持Redhat 6.5,但它仍然可以像分发中所宣传的那样工作。我们使用的编解码器是:libavcodec52和libavformat52,如下所述:http://www.oracle.com/technetwork/java/javafx/downloads/supportedconfigurations-1506746.html

遗憾的是,这个例外没有解释真正出错的地方。