我正在构建一个小型的 Swing 应用程序,我想在其中嵌入一部电影。重要的是,这个应用程序是一个WebStart应用程序 - 并且库应该能够打包在我启动的jnlp中 - 即不依赖于本机库。
我知道并尝试过JMF,但我认为与其他框架相比,格式兼容性相对较差。
有人可以使用他们推荐的库提供简单实现的示例代码片段吗?
提前非常感谢。
JavaFX 作为基于 Java 的媒体播放框架的解决方案的一些注意事项。
- 从Jdk7u4开始,JavaFX与Mac和Windows的jdk共同捆绑在一起。(XP、Vista、7、32 和 64 位(。
- JavaFX可以嵌入到Swing应用程序中。
- JavaFX包含本机库,但任何Java框架都需要本机库才能很好地完成视频。
- JavaFX SDK 中包含全面的部署工具包和/或包括生成基于 jnlp 的部署的功能。
- JavaFX 2.1支持vp6编码的flvs(旧格式(以及一些更现代和经常使用的编码格式,如mp4/aac/mp3。
- JavaFX仅支持有限的媒体编解码器和容器格式,例如,如果您的计算机上安装了编解码器,并且可以播放以该格式编码的文件,例如chrome,Windows Media Player或Flash,但不能保证相同的文件将在JavaFX中播放。
- 在XP或Linux上播放mp4需要用户手动安装必要的编解码器,但其他平台(osx,win7,vista(不需要手动安装mp4编解码器。
- 在Mac上使用JavaFX需要用户使用OpenJDK 7 for Mac,而不是Apple JDK。
- JavaFX对Mac上jnlp启动的应用程序的支持要到今年晚些时候(2012年(才能提供,Linux也是如此。
- 您可以将整个JavaFX平台与您的应用程序捆绑在jnlp中(尽管我还没有看到有人这样做(。
- jnlp 部署的推荐方法是向 jnlp 添加最小 JavaFX 环境的规范,并让 JavaFX 部署工具包和 webstart 负责确保它在用户的机器上存在并正确安装。 Swing 和 JavaFX 之间的
- 交互需要一些不便和线程方面的关注,并且 Swing 和 JavaFX 之间的应用程序启动代码也略有不同。 有些人在论坛上抱怨过这个问题,大多数人似乎没有太多问题。
- 无论好坏(我相信更好(,JavaFX可能是Oracle唯一一个正在接受重大开发和新功能的媒体和客户端开发框架。
- 最终(今年或明年(JavaFX将包含在运行现代版Java SE的所有主要消费者平台的所有新Java运行时中。
- 社区对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,但与其他框架相比,我认为格式兼容性相对较差。
您对缺乏对现代编解码器的支持是正确的,但它适用于较旧的编解码器。 在以下情况下,这可能是一个可行的选择:
- 您可以控制格式(而不是用户在其中打开"任何旧视频"(。 你显然是这样做的。
- 带宽不是一个大问题。 更现代的编解码器显着改善了压缩。
虽然使用本机的JMF的"性能包"版本支持更多格式,但核心Java JMF API也提供了一些基本格式。