用于在Swing应用程序中嵌入电影的任何简单(和最新)Java框架?

我正在构建一个小型Swing应用程序,我想在其中嵌入一部电影。 重要的是,这个应用程序是一个WebStart应用程序 – 该库应该能够打包在我启动的jnlp中,而不依赖于本机库。

我知道并尝试过JMF,但与其他框架相比,我认为格式兼容性相对较差。

有人可以使用他们推荐的库提供简单实现的示例代码片段吗?

提前谢谢了。

JavaFX作为基于Java的媒体播放框架的解决方案的一些注意事项。

  1. 从Jdk7u4开始,JavaFX与用于Mac和Windows的jdk(XP,Vista,7,32和64位)共同捆绑在一起。
  2. JavaFX可以嵌入Swing应用程序中。
  3. JavaFX包含本机库,但任何Java Framework都需要本机库才能很好地完成video。
  4. JavaFX SDK包含一个全面的部署工具包和/或包括生成基于jnlp的部署的function。
  5. JavaFX 2.1支持vp6编码的flvs(旧格式)以及一些更现代和常用的编码格式,如mp4 / aac / mp3。
  6. JavaFX仅支持有限的媒体编解码器和容器格式,例如,如果您的计算机上安装了编解码器,并且可以播放以该格式编码的文件,例如Chrome,Windows媒体播放器或不保证同一文件将使用的闪存在JavaFX中玩。
  7. 在XP或Linux上播放mp4需要用户手动安装必要的编解码器,但其他平台(osx,win7,vista)不需要手动安装mp4编解码器。
  8. 在Mac上使用JavaFX要求用户使用OpenJDK 7 for Mac,而不是Apple JDK。
  9. JavaFX对Mac上jnlp启动的应用程序的支持将在今年晚些时候(2012年)推出,并且类似于Linux。
  10. 您可以将整个JavaFX平台与您的应用程序捆绑在一个jnlp中(尽管我还没有看到任何人这样做)。
  11. jnlp部署的推荐方法是向jnlp添加最小JavaFX环境的规范,并让JavaFX部署工具包和webstart负责确保它在用户的计算机上存在并正确安装。
  12. Swing和JavaFX之间的交互需要一些不便和关心线程,以及在Swing和JavaFX之间稍微不同的应用程序启动代码。 有些人在论坛上抱怨过,大多数人似乎没有太多问题。
  13. 无论好坏(我相信更好),JavaFX可能是Oracle唯一正在接受持续主要开发和新function的媒体和客户端开发框架。
  14. 最终(今年或下一年)JavaFX将包含在运行现代版Java SE的所有主要消费者平台的所有新Java运行时中。
  15. Oracle和第三方对JavaFX开发的社区支持(我相信)很好。

这是一个播放video的示例JavaFX应用程序:

import javafx.application.Application; import javafx.scene.*; import javafx.scene.media.*; import javafx.stage.Stage; public class VideoPlayerExample extends Application { public static void main(String[] args) throws Exception { launch(args); } @Override public void start(final Stage stage) throws Exception { final MediaPlayer oracleVid = new MediaPlayer( new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv") ); stage.setScene(new Scene(new Group(new MediaView(oracleVid)), 540, 208)); stage.show(); oracleVid.play(); } } 

虽然我对JMF的格式兼容性没有任何问题,但您可以查看旨在成为Flash竞争对手的JavaFX,因此应该支持所有媒体格式和编解码器。 你也可以使用JNI / JNA将Flash播放器嵌入到java应用程序中,但它似乎太复杂了。 我建议您从JMF开始,只有在遇到问题时才寻找其他解决方案。

..已经尝试过JMF,但与其他框架相比,我认为格式兼容性相对较差。

你对现代编解码器缺乏支持是正确的,但它适用于较旧的编解码器。 如果:

  1. 您可以控制格式(而不是用户在其中打开“任何旧video”)。 你显然做的。
  2. 带宽不是一个大问题。 更现代的编解码器显着改善了压缩。

虽然使用本机的JMF的“性能包”版本支持更多格式,但核心Java JMF API也提供了一些基本格式。