背景知识
(您可以立即跳过并转到下一项)
在学习Java时,当我掌握了Swing之后,它立即变得很有趣,“但是如何播放音频或视频?”。 我在Google周围闲逛了很长时间,在那里挖了几个库,从理论上讲,这些库应该可以给我我想要的东西。 但是,正如实践所表明的那样,这些库中的大多数都读取很少的格式,并且使用起来不太方便。 经过几天的翻阅,我终于找到了理论上可以帮助我解决问题的东西。 VLCj库从VLC媒体播放器中提取编解码器,并与它们一起播放文件。 改天在官方网站上苦苦挣扎,终于设法开始在JFrame中播放视频文件。
让我们开始做生意:
1.下载库本身(最好使用最新版本,因为它有兼容性问题)
链接2.如果尚未安装VLC媒体播放器,则必须下载并安装它。 您可以在VideoLan官方网站上下载它(最好使用最新版本,它包含更多编解码器)。
3. IDE,我使用Eclipse。
首先,创建一个新项目并将其命名,例如“ MediaPlayer”。
现在,在eclipse-workspace中打开MediaPlayer文件夹,然后将下载的带有库的存档解压缩到该文件夹中。
进一步在Eclipse中,在项目的设置中,单击“添加外部JAR”,然后在打开的窗口中找到并选择文件vlcj-3.0.1.jar。 选择“他” 和“仅他” 。
因此,该库已连接到项目。 接下来,我们需要创建该类的实例。 例如,创建Test.java(我希望不需要向任何人解释此过程)。
我们得到了一个空的类,其内容大致如下:
public class Test { public static void main(String[] args) { } }
接下来,我们需要创建一个要在其中显示视频的JFrame。 我们还创建了一个JPanel并将画布放入其中,我们将其用作视频播放器的表面。
public class Test { public static void main(String[] args) { JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.setBounds(100,100,1000,600); Canvas c=new Canvas(); c.setBackground(Color.black); JPanel p=new JPanel(); p.setLayout(new BorderLayout()); p.add(c); f.add(p); } }
因此,视觉部分已准备就绪。 接下来,我们直接转到库和VLC播放器。 并在我们的框架中实际创建播放器本身。
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\VideoLAN\VLC"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); MediaPlayerFactory mpf= new MediaPlayerFactory(); EmbeddedMediaPlayer emp= mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f)); emp.setVideoSurface(mpf.newVideoSurface(c)); emp.setEnableMouseInputHandling(false); emp.setEnableKeyInputHandling(false); String file="C:\\Users\Admin\eclipse-workspace\MediaPlayer/video.avi"; emp.prepareMedia(file); emp.play();
在这里,我们指示了VLC播放器的路径(更具体地说,文件libvlc.dll,libvlccore.dll和plugins文件夹)。 我们创建了一个高级媒体播放器(它具有比“媒体播放器”更大的功能集),为它分配了表面,指示了视频文件的路径,准备了要播放的文件,然后实际播放了它。
结果,您的代码将如下所示:
import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import com.sun.jna.Native; import com.sun.jna.NativeLibrary; import uk.co.caprica.vlcj.binding.LibVlc; import uk.co.caprica.vlcj.player.MediaPlayerFactory; import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; import uk.co.caprica.vlcj.player.embedded.windows.Win32FullScreenStrategy; import uk.co.caprica.vlcj.runtime.RuntimeUtil; public class Test { public static void main(String[] args) { JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.setBounds(100,100,1000,600); Canvas c=new Canvas(); c.setBackground(Color.black); JPanel p=new JPanel(); p.setLayout(new BorderLayout()); p.add(c); f.add(p); NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files/VideoLAN/VLC"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); MediaPlayerFactory mpf= new MediaPlayerFactory(); EmbeddedMediaPlayer emp= mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f)); emp.setVideoSurface(mpf.newVideoSurface(c)); emp.setEnableMouseInputHandling(false); emp.setEnableKeyInputHandling(false); String file="C:\\Users\Admin\eclipse-workspace\MediaPlayer/video.avi"; emp.prepareMedia(file); emp.play(); } }
请记住:
-您通往VLC媒体播放器的路径可能不同。
-视频的路径可能会有所不同。
为了方便起见,您可以将必要的文件从VLC媒体播放器复制到项目中。 这也消除了在程序可以运行的计算机上安装VLC的需要。
刚开始,我很难播放名称或路径中带有西里尔字母的文件。 如果遇到同样的困难,请右键单击您的类实例并进入其设置,然后将其编码更改为UTF-8