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

时间:2010-01-11 12:50:03

标签: java video jmf playback fmj

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

以下是我的要求:

  • 生产质量

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

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

  • 播放期间,视频和音频必须同步。

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

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


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

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

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

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


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

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

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

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

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


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

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


  • 使用FMJ

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


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

6 个答案:

答案 0 :(得分:11)

兄弟可以为Xuggler喊出来吗?

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

简而言之,您可以使用一点JNA魔术来直接使用MPV本机库,然后将视频显示在JavaFX舞台上。如果您使用子舞台,甚至可以在视频顶部叠加JavaFX控件(具有完全透明的支持)。

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