Java中的video播放(JMF,Fobs4JMF,Xuggler,FMJ)
我需要用Java简单的video播放。
这是我的要求:
-
生产质量
-
打开并解码video文件,我可以选择其video和音频编解码器。 IE我可以选择表现良好的编解码器。
-
能够播放 , 暂停 ,搜索ToFrame或seekToTime并停止播放。 基本上我希望能够以非线性方式播放单个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。