任何用于在 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框架都需要本机库才能很好地完成视频。
  4. JavaFX SDK 中包含全面的部署工具包和/或包括生成基于 jnlp 的部署的功能。
  5. JavaFX 2.1支持vp6编码的flvs(旧格式(以及一些更现代和经常使用的编码格式,如mp4/aac/mp3。
  6. JavaFX仅支持有限的媒体编解码器和容器格式,例如,如果您的计算机上安装了编解码器,并且可以播放以该格式编码的文件,例如chrome,Windows Media Player或Flash,但不能保证相同的文件将在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 之间的
  13. 交互需要一些不便和线程方面的关注,并且 Swing 和 JavaFX 之间的应用程序启动代码也略有不同。 有些人在论坛上抱怨过这个问题,大多数人似乎没有太多问题。
  14. 无论好坏(我相信更好(,JavaFX可能是Oracle唯一一个正在接受重大开发和新功能的媒体和客户端开发框架。
  15. 最终(今年或明年(JavaFX将包含在运行现代版Java SE的所有主要消费者平台的所有新Java运行时中。
  16. 社区对Oracle和第三方JavaFX开发的支持(我相信(是好的。

下面是一个播放视频的示例 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 的格式兼容性方面没有任何问题,但您可以看看 JavaFX,它旨在成为 Flash 的竞争对手,因此应该支持所有媒体格式和编解码器。您也可以使用 JNI/JNA 将 Flash player 嵌入到 Java 应用程序中,但这似乎太复杂了。我建议您从JMF开始,只有在您确实遇到问题时才寻找其他解决方案。

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

您对缺乏对现代编解码器的支持是正确的,但它适用于较旧的编解码器。 在以下情况下,这可能是一个可行的选择:

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

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

相关内容

  • 没有找到相关文章

最新更新