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

2022-09-01 19:15:47

我需要Java中的简单视频播放。

以下是我的要求:

  • 生产质量

  • 打开并解码视频文件,其视频和音频编解码器可以由我选择。也就是说,我可以选择行为良好的编解码器。

  • 能够播放暂停寻求ToFrame寻求时间停止播放。从本质上讲,我希望能够以非线性方式播放单个视频文件的片段。例如,我可能想播放20.3秒到25.6秒的片段,暂停10秒,然后播放340.3秒到350.5秒的片段,依此类推。

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

  • 视频必须以 Swing JComponent 形式显示。

  • 必须能够在商业产品中使用,而不必是开源的(即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在Java中播放视频?


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

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


  • 使用 FMJ

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


感谢您对我的问题的看法。


答案 1

兄弟能为旭格勒呐喊吗?


答案 2

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

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

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


推荐