HTTP实时流(HLS)无法正常使用Java FX 2.2.21

时间:2014-07-15 17:46:01

标签: java video javafx-2 media-player http-live-streaming

如果我错过了其他地方的答案,我很抱歉,但我在这里,Oracle和网络上搜索得很高,并且找不到支持我的问题。

短篇小说:我写了一个基于JavaFX 2.2.7的媒体播放器,它已被证明可播放支持的本地和远程视频文件,但不会播放HTTP直播流。直接从Oracle尝试过SSCCE,升级到JavaFX2.2.21并尝试在Java 7 JRE中运行。 HTTP直播不起作用。

背景故事
我编写了一个嵌入Java 6 Swing应用程序(使用JPanels等)的基于JavaFX 2.2.7的媒体播放器。我可以播放支持格式的本地文件(例如Sintel trailor mp4 h264),也可以播放支持格式的远程文件(例如直接来自oracle.com的FLV文件)。

问题: 当我尝试使用" HTTP直播流" (HLS),什么都不玩。将HTTP Live Streaming URL分配给javafx.scene.media.Media对象似乎不起作用。我最终得到一个空白的玩家,但没有例外或错误。

我显然可以成功地从HLS URL实例化Media对象而不会出现错误:

private static final String MEDIA_URL = "http://download.oracle.com/otndocs/products/javafx/JavaRap/prog_index.m3u8";

Media media = new Media(MEDIA_URL);
MediaException ex = media.getError();

if( ex != null ) {
  System.out.println("Media Error" + ex.getMessage());
} else {
  System.out.println("No Media Error");
}

程序控制台输出:"无介质错误"

已尝试的疑难解答步骤

我认为我的播放器代码有问题所以我去了http://download.oracle.com/otndocs/products/javafx/2/samples/Ensemble/index.html#SAMPLES/Media/Streaming%20Media%20Player并直接复制了源并运行它...不幸的是,同样的结果发生了。 " Ensemble Streaming Media Player"运行,但只是显示一个空白的视频窗口。媒体控件和滑块可用,但不播放视频。 (重要的是要注意播放器在我的网络浏览器中工作,而Rap视频很糟糕。)

基于Java 2.2.7的发行说明,我的印象是支持HLS。由于担心我的假设出错,我尝试升级到独立的JavaFX 2.2.21,但这并没有解决问题。结果完全一样。没有例外,没有错误,没有视频。

我无法升级到Java 7(由于项目限制,我坚持使用Java 1.6.0.32),但为了争论,我尝试在Java 7上运行Ensemble媒体播放器代码,结果是一样的

非常感谢任何人提供的帮助。

(对于SSCCE,您可以在上面的Oracle Streaming Media Player Link上查看我尝试使用的代码。)

提前感谢能够提供帮助的任何人!

1 个答案:

答案 0 :(得分:0)

我的结论:Http Live Streaming不适用于JavaFX 2.2.7或2.2.21和Java 1.6.0_32。

我相信我已经证明问题在于JavaFX 2.2.7和JavaFX 2.2.21,并且使用与Jre7捆绑在一起的新JavaFX解决了这个问题。

我创建了一个全新的项目,并将与JRE 7捆绑在一起的JavaFX jar文件添加到我的构建路径中。我从http://download.oracle.com/otndocs/products/javafx/2/samples/Ensemble/index.html#SAMPLES/Media/Streaming%20Media%20Player复制了代码,但它确实有效。

所以我对原始的Java Eclipse项目进行了一些修改。

删除了构建路径:

  • C:\ Program Files(x86)\ Oracle \ JavaFX 2.2 Runtime \ lib \ jfxrt.jar
  • C:\ Program Files(x86)\ Oracle \ JavaFX 2.2 Runtime \ lib \ javaws.jar
  • C:\ Program Files(x86)\ Oracle \ JavaFX 2.2 Runtime \ lib \ plugin.jar
  • C:\ Program Files(x86)\ Oracle \ JavaFX 2.2 Runtime \ lib \ deploy.jar

添加到构建路径:

  • C:\ Program Files(x86)\ Java \ jre7 \ lib \ jfxrt.jar
  • C:\ Program Files(x86)\ Java \ jre7 \ lib \ javaws.jar
  • C:\ Program Files(x86)\ Java \ jre7 \ lib \ plugin.jar
  • C:\ Program Files(x86)\ Java \ jre7 \ lib \ deploy.jar

仍在使用Java 1.6.0_32运行时,我运行了我的应用程序,一切正常。

当然,这感觉就像一个巨大的黑客。我对有关JavaFX 2.2.7的发行说明感到失望。

注意 :要将我的应用程序导出为可运行的Jar,我还必须拉出与JavaFX相关的" .dll"来自JRE 7的库,并在运行jar之前将它们添加到java.library.path(使用批处理脚本)。