java - HTTP Live Streaming (HLS) 无法运行 Java FX 2.2.21

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

如果我在其他地方错过了这个问题的答案,我深表歉意,但我在这里、Oracle 和网络上到处搜索,但没有找到对我的问题的支持。

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

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

问题: 当我尝试使用“HTTP Live Stream”(HLS) 时,没有播放任何内容。将 HTTP Live Streaming URL 分配给 javafx.scene.media.Media 对象似乎不起作用。我最终得到一个空白播放器,但没有异常或错误。

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

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”运行,但只显示一个空白视频窗口。媒体控件和 slider 可用,但无法播放视频。 (重要的是要注意播放器在我的网络浏览器中工作,而说唱视频很糟糕。)

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

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

如果有人能提供任何帮助,我们将不胜感激。

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

提前感谢任何可以提供帮助的人!

最佳答案

我的结论: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,我还必须从 JRE 7 中提取与 JavaFX 相关的“.dll”库并将它们添加到 java .library.path(使用批处理脚本)在运行 jar 之前。

关于java - HTTP Live Streaming (HLS) 无法运行 Java FX 2.2.21,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24764790/

相关文章:

java - 尝试调用 JPA 函数时出现语法错误

ios - 在 iOS 下检索电影编解码器?

Android 前置摄像头正在录制 7.5 和 8.0 之间的视频 - setVideoFrameRate 不起作用 - Samsung galaxy s2

java - 在java中从许多小svg文件创建SVG文件

java - 如何从 JavaFX 应用程序连接到 HTTPS URL

java - 获取实际屏幕高度(android)

java - 如何在不创建新文件的情况下更新文件

java - 将 JarURLInputStream 用于 JavaFX 图像

java - 同步和静态同步

html - 如何防止在 Safari 中循环 html5 mp4 视频时出现延迟?