5

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

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

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

提前谢谢了。

4

3 回答 3

28

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

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

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

于 2012-05-03T22:31:37.133 回答
2

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

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

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

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

于 2012-05-04T13:03:48.843 回答