Java中的video播放(JMF,Fobs4JMF,Xuggler,FMJ)

我需要用Java简单的video播放。

这是我的要求:

  • 生产质量

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

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

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

  • video必须显示在Swing JComponent中。

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


我的研究让我得到了以下解决方案:

  • 使用Java Media Framework + Fobs4JMF http://fobs.sourceforge.net/f4jmf_first.html

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

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

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


  • 编写一个播放video的Flash应用程序,并使用JFlashPlayer将其引入我的Java Swing应用程序

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

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

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

我喜欢这个解决方案的是Flash中的video播放应该坚如磐石。 有没有人用JFlashPlayer在Java中播放video?


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

Xuggler是Java的FFMpeg包装器,它似乎是一个非常活跃和高质量的项目。 然而,实现要求中描述的简单video回放并不是微不足道的(特别是寻求),但是一些工作已经在MediaTools MediaViewer中完成,它将成为构建的基础。


  • 使用FMJ

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


我很感激你对我的问题的看法。

兄弟可以为Xuggler大喊一声吗?

在我看来, VLCJ是这类事物的前进方向。 我喜欢Xuggler编码/转码工作,但不幸的是,简单的播放和解决所有的同步问题等等都是如此复杂 – 而且它确实非常像重新发明轮子这样做。

VLCJ的唯一之处在于,为了让它与多个玩家可靠地工作,我不得不诉诸于进程中的玩家。 这个框架并不是世界上最简单的东西,但是当它在那里它工作得很漂亮。 我目前正在我的应用程序中运行3个进程中的玩家并没有任何问题。

另一个需要注意的是,嵌入式媒体播放器不适用于摇摆组件,只是一个重量级的canvas – 但这对我来说根本没有问题。 如果是这样,那么你可以使用直接媒体播放器来获得一个缓冲图像,并在你选择的任何内容上显示它,但它会更多地进入你的CPU(虽然不会超过采用这种方法的其他玩家。)

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

我一直在使用jffmpeg,就像你使用FOBS一样,它工作得很好,虽然我没有比较它们。

我也希望看到一种与JavaFX一样的简单方式来与本机编解码器连接,但JavaFX和Java之间似乎没有真正的集成。

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

没有尝试过Xuggler(我感兴趣),但我和VLCJ玩得很开心 。 我发现它的缺点只是你必须在申请之前安装VLC。

Interesting Posts