25

我需要用 Java 进行简单的视频播放。

以下是我的要求:

  • 生产质量

  • 打开和解码我可以选择视频和音频编解码器的视频文件。IE 我可以选择表现良好的编解码器。

  • 能够播放暂停seekToFrameseekToTime停止播放。本质上,我希望能够以非线性方式播放单个视频文件的片段。例如,我可能想播放 20.3 秒到 25.6 秒的片段,暂停 10 秒,然后播放 340.3 秒到 350.5 秒的片段,等等。

  • 在播放过程中,视频和音频必须同步。

  • 视频必须显示在 Swing JComponent 中。

  • 必须能够在商业产品中使用而不必是开源的(IE LGPL 或 Comercial 都不错)


我的研究使我找到了以下解决方案:

我已经实现了一个快速原型,这似乎可以满足我的需要。我可以使用以下方式播放一段视频:

player.setStopTime(new Time(end));
player.setMediaTime(new Time(start));
player.start();

虽然 Fobs4JMF 似乎可以工作,但我觉得代码质量很差,项目不再活跃。有谁知道任何使用 Fobs4JMF 的产品?


  • 编写一个播放视频的 Flash 应用程序并使用 JFlashPlayer 将它带入我的 Java Swing 应用程序

与 Java 不同,Flash 在播放视频方面表现出色。我可以使用以下方法编写一个小型 Flash 应用程序:

open(String videoFile),
play(),
pause(),
seek(int duration),
stop()

然后使用 JFlashPlayer 将其引入 Java,该 JFlashPlayer 可以从 Java 调用 Flash 函数。

我喜欢这个解决方案的地方在于 Flash 中的视频播放应该坚如磐石。有人用 JFlashPlayer 用 Ja​​va 播放视频吗?


  • 在 Xuggler 之上编写一个简单的媒体播放器

Xuggler 是一个用于 Java 的 FFMpeg 包装器,它似乎是一个非常活跃和高质量的项目。但是,实现需求中描述的简单视频播放并非易事(特别是 Seeking),但在 MediaTools MediaViewer 中已经完成了一些工作,这将是构建的基础。


  • 使用 FMJ

我试图让 FMJ 工作,但到目前为止还没有成功。


我会很感激你对我的问题的意见。

4

6 回答 6

13

兄弟可以为Xuggler大喊大叫吗?

于 2010-01-26T04:00:45.140 回答
5

在我看来,VLCJ是这类事情的前进方向。我喜欢 Xuggler 的编码/转码工作,但不幸的是,做简单的播放和解决所有的同步问题等等实在是太复杂了——而且这样做感觉就像是在重新发明轮子。

VLCJ 唯一的问题是为了让它与多个播放器可靠地工作,我不得不求助于进程外播放器。该框架并不是世界上最简单的东西,但是当它在那里时,它可以很好地工作。我目前在我的应用程序中并排运行 3 个进程外播放器,没有任何问题。

另一个需要注意的是,嵌入式媒体播放器不能与摇摆组件一起使用,只是一个重量级的画布——但这对我来说根本不是问题。如果是这样,那么您可以使用直接媒体播放器获取缓冲图像并将其显示在您选择的任何内容上,但它会更多地占用您的 CPU(尽管不会比采用这种方法的其他播放器更多。)

于 2011-08-01T22:06:49.247 回答
3

JavaFX内置了许多可用的视频和音频编解码器。这可能是目前获得最广泛支持的解决方案。

于 2010-01-11T14:10:35.950 回答
3

我一直在以与使用 FOBS 相同的方式使用 jffmpeg,它工作得很好,尽管我没有比较它们。

我也很想看到一种像 JavaFX 那样与本机编解码器交互的简单方法,但 JavaFX 和 Java 之间似乎没有真正的集成。

还有一些工作试图将 VLC 库 libvlc 导入 java。我还没有尝试过,并且有兴趣收到任何尝试过的人的回复。

于 2010-02-20T23:07:45.823 回答
3

还没有尝试过 Xuggler (我对此很感兴趣),但我和VLCJ 玩得很开心。我发现它的缺点是您必须在应用程序之前安装 VLC。

于 2010-07-02T20:55:09.050 回答
0

我建议使用MPV。您可以很容易地将它与 JavaFX 结合使用,请参阅此示例

简而言之,您使用一点 JNA 魔术直接使用 MPV 原生库,然后让视频显示在 JavaFX 舞台上。如果您使用子阶段,您甚至可以在视频顶部覆盖 JavaFX 控件(具有完全透明的支持)。

VLC(与 VLCJ)可以以类似的方式使用,但我发现 MPV 解决方案性能更好(更快的搜索和启动时间)。

于 2020-04-27T13:05:07.867 回答