使用JAVA播放媒体文件

我想建立一个踏板安全的JAVA应用程序:

  1. 播放* .mp4或其他格式的高清媒体文件(全屏模式1920×1080)
  2. 将事件绑定添加到applet(我将使用触摸屏监视器)

我试图搜索很多,但发现只有过时的JMF(VLCJ等)的例子。 所以我想让你问一下从哪里开始构建这个applet。 我可以包含哪些库。

我在这里发现了一个类似的项目: Media Shuffle但是我希望我的媒体文件位于一个文件夹中,它们在应用程序中显示为启动所选video(VLC全屏或其他跨平台媒体播放器)的图标,以便在第一次触摸时播放。 第二次触摸必须停止播放器并转到主页面。

请分享您的想法,我该怎么做。 任何代码示例都会很棒。

我会推荐vlcj,因为我相信它有你可能需要或拥有的所有格式。它根本没有过时而且很容易入手。如果你想以图形方式显示video我不认为你能找到像你这样简单的指令提到但如果你组织我将提及的所有步骤并进行更深入的解释,你会发现vlcj是处理这类媒体的最佳选择(因为它在我看来)。我也喜欢并推荐JavaFx因为你的影响可以做到这一点,但我很难设置和编码那些东西。

所以,让我们开始吧。首先,我想说我已经在基于Swing的应用程序(在Windows中)中实现了vlcj,但这不应该让你感到难过,因为对于你提到的即时弹出播放器,我们可以制作一个jdialog并将video表面放在其contentPane中。

脚步

1)所以应该做的第一件事是下载vlc媒体播放器(我们需要在32位或64位计算机环境中播放的32位版本)。我有一个糟糕的月份试图配置为什么我的应用程序没有加载所需的库成功地发现,当你运行一个jar exetutable文件时,它运行在32位jvm上(eclipse运行在64位jvm,一切都很好。这就是为什么我们需要32位版本),而我有64位本机库如果您下载并安装32位vlc媒体播放器,请在MyProject内部创建另一个文件夹并将其称为“需要”(这里我们将放置所有文件夹)的某个文件夹中包含您的项目(请说“C:/ MyProject”)。 vlcj所需的库,以便正常工作)。现在从C:\ Program Files(x86)\ VideoLAN \ VLC的内容复制插件目录和4个dll(axvlc.dll,libvlc.dll,libvlccore.dll, npvlc.dll)并将它们粘贴到您需要的文件夹中

2)现在,如果您在Eclipse IDE或类似工作中工作,则需要在项目中创建一个文件夹(比如说“lib”),然后在里面创建另一个文件夹(将其命名为“jars”)。在jars文件夹中放置以下jar: jna-3.5.1.jar,platform-3.5.1.jar,vlcj-2.2.0.jar。你可以从vlcj google project找到这些jar。然后只需将它们包含在你的类路径中(选择它们并右键单击 – >添加到构建路径或转到项目属性 – > Java构建路径并添加这些3个jar子。在我们开始使用播放器设置进行任何编码之前,全部用于设置。

3)你必须在开始使用它之前加载现在的vlcj。我只是使用这个代码来实现这一点(我会很快解释它不要担心)。

public void LoadLibrary(){ SwingWorker loadWorker; loadWorker = new SwingWorker(){ @Override protected Object doInBackground() throws Exception { // TODO Auto-generated method stub Thread.sleep(2000); path = new File("").getAbsolutePath().toString(); path = path.replace(".", ""); path = path.replace("\\", "//"); path = path+"//Needed"; if(RuntimeUtil.isWindows()){ NativeLibrary.addSearchPath( "libvlc",path ); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); } else if(RuntimeUtil.isNix()){ NativeLibrary.addSearchPath( "libvlc",path ); } mediaPlayerFactory = new MediaPlayerFactory(); player = mediaPlayerFactory.newEmbeddedMediaPlayer(); CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas); player.setVideoSurface(videoSurface); return null; } }; loadWorker.execute(); } 

所以我要做的是为基于Swing的应用程序创建一个线程,因为如果你的媒体canvas不可显示你就无法播放媒体,而且构造函数中的所有内容都是在代码完成时完全构建的。这意味着在制作播放器之前我们应该先做创建一个延迟(我的是2秒)让我们的构造函数结束他的工作和我们的JFrame(或jWindow或jDialog等)变得可显示。接下来我动态地计算我的路径我的runnable jar的路径(注意:不是从工作区里面Eclipse)并进入Needed文件夹以实现所需的本机库。在if语句中,我告诉系统在我计算的特定路径中查找libvlc.dll,然后加载它,从而向前迈出一步来播放媒体文件。在if-else语句之外我实际创建我的播放器并为其VideoSurface放置canvas(canvas是Canvas java.awt对象我使用WindowsCanvas因为我只在windows中工作,你可以找到linux或mac类似的canvas(不要担心) THA t!))在Swing-Worker字段(线程)之外我只是告诉要执行的线程(作为调用函数指令很重要)。

4)要播放文件,我只需在我的应用程序中的某个地方使用按钮,每次按下时都会调用一个动作事件,这样我们就可以在其中执行某些操作。例如,让JFileChooser从中选择一个媒体文件。您可以轻松搜索对于它,但这是我的代码:

 final JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter0 = new FileNameExtensionFilter(".wav", "wav"); FileNameExtensionFilter filter1 = new FileNameExtensionFilter(".mp3","mp3"); FileNameExtensionFilter filter2 = new FileNameExtensionFilter(".mpg","mpg"); FileNameExtensionFilter filter3 = new FileNameExtensionFilter(".mp4","mp4"); FileNameExtensionFilter filter4 = new FileNameExtensionFilter(".avi","avi"); FileNameExtensionFilter filter5 = new FileNameExtensionFilter(".flv","flv"); FileNameExtensionFilter filter6 = new FileNameExtensionFilter(".wmv","wmv"); FileNameExtensionFilter filter7 = new FileNameExtensionFilter(".3gp", "3gp"); FileNameExtensionFilter filter8 = new FileNameExtensionFilter(".swf", "swf"); FileNameExtensionFilter filter9 = new FileNameExtensionFilter(".mkv", "mkv"); FileNameExtensionFilter filter10 = new FileNameExtensionFilter(".flac", "flac"); FileNameExtensionFilter filter11 = new FileNameExtensionFilter("Music & Videos","wav","mp3","mpg","mp4","avi","flv","wmv","3gp","swf","mkv","flac","VOB"); FileNameExtensionFilter filter12 = new FileNameExtensionFilter("Music","wav","mp3","flac"); FileNameExtensionFilter filter13 = new FileNameExtensionFilter(".VOB", "VOB"); FileNameExtensionFilter filter14 = new FileNameExtensionFilter("Videos","mpg","mp4","avi","flv","wmv","3gp","swf","mkv","VOB"); chooser.setFileFilter(filter14); chooser.setFileFilter(filter2); chooser.setFileFilter(filter3); chooser.setFileFilter(filter4); chooser.setFileFilter(filter5); chooser.setFileFilter(filter6); chooser.setFileFilter(filter13); chooser.setFileFilter(filter7); chooser.setFileFilter(filter8); chooser.setFileFilter(filter9); chooser.setFileFilter(filter12); chooser.setFileFilter(filter0); chooser.setFileFilter(filter1); chooser.setFileFilter(filter10); chooser.setFileFilter(filter11); int returnVal = chooser.showOpenDialog(getParent()); if(returnVal == JFileChooser.APPROVE_OPTION) { System.out.println("You chose to open this file: " + chooser.getSelectedFile().getName()); File myfile1 = chooser.getSelectedFile(); myfilepath1 = chooser.getSelectedFile().getAbsolutePath(); } player.startMedia("file:///"+myfilepath1); player.pause(); 

那些文件filter是vlcj可以为你播放的一些媒体文件类型。我做的是打开一个文件对话框来选择一个文件,如果我选择一个文件我保持其路径(有用的说vl​​cj在哪里查找它)。

5)现在播放文件你只需要输入以下代码:

 player.play(); 

也许在另一个Button的另一个动作事件中。

6)如果你完成了那些你需要做的就是将你的项目导出到一个可运行的jar文件到你最初创建的MyProject文件夹并运行它(通过双击它来注意(不是从控制台)(否则它将用64bit运行) jvm,你不希望这导致你有32位原生和vlcj不接受这些冲突)))

在结论中,我不得不说这些步骤对我有用。我希望它们能帮助你进一步开发应用程序。

此致,PeGiannOS

首先,你必须

//创建播放器以播放URL中指定的媒体

 Player mediaPlayer = Manager.createRealizedPlayer( mediaURL ); 

现在

 mediaPlayer.start(); // start playing the media clip 

我希望它有效!

VLCJ并没有过时,它积极开发,并且非常灵活,function强大。 我在我的应用程序中使用它同时在应用程序内显示多个video流,以及同时处理文本覆盖等内容。 这样做有时很棘手,但绝对有可能。

有许多基本的(最新的)示例可以帮助您开始使用VLCJ 。