如果我错过了其他地方的答案,我深表歉意,但是我在这里,Oracle和网络上搜索了很多内容,但找不到我的问题的支持。
简短的故事:我写了一个基于JavaFX 2.2.7的媒体播放器,事实证明它可以播放受支持的本地和远程视频文件,但是不能播放HTTP Live Streams。直接从Oracle试用了SSCCE,已升级到JavaFX2.2.21,还尝试在Java 7 JRE中运行。HTTP Live Streaming不起作用。
背景:
我已经编写了一个嵌入Java 6 Swing应用程序中的基于JavaFX 2.2.7的媒体播放器(使用JPanels等)。我可以播放受支持格式的本地文件(例如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和直接复制源代码并运行它...不幸的是,发生了相同的结果。“集成流媒体播放器”运行,但是仅显示空白视频窗口。可以使用媒体控件和滑块,但不能播放视频。(需要注意的是,该播放器可以在我的网络浏览器中使用,并且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链接上查看我逐字尝试的代码。)
在此先感谢任何可以提供帮助的人!
我的结论: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项目进行了一些修改。
从构建路径中删除了:
添加到构建路径:
仍然使用Java 1.6.0_32运行时,我运行了应用程序,一切正常。
当然,这就像一个巨大的hack。我对JavaFX 2.2.7的发行说明感到失望。
注意:要将我的应用程序导出为可运行的Jar,我还必须从JRE 7中提取与JavaFX相关的“ .dll”库,并将它们添加到java.library.path中(使用批处理脚本),然后再运行jar。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句