在Java(Windows系统)中实现vlc播放器功能
来源:互联网 发布:淘宝怎么1元秒杀 编辑:程序博客网 时间:2024/06/08 16:27
学习Java几个月,刚刚入门。昨天看到极客学院的Java的入门视频最后有一个简易播放器的制作,因为最近学校要做一个项目,正好需要加入一个视频播放器,就按照视频的方法来做,但是在做时发现N多问题,都是在Windows下特殊的问题,希望可以帮助到需要的人。
这里给出极客学院的视频链接。
大家会在Windows下遇到的问题居多,因为极客学院的视频里用的机器是MAC所以在环境搭建的时候会和Windows有很多不一样的地方,所以我把我在实现过程中遇到的问题都总结一下。
此文章适合初学者学习,如有哪里不足请大家指出来。
搭建环境
环境搭建也是最重要的一步,如果环境都没有还谈何开发。
1.首先需要下载vlc播放器,可以在官网下载或者直接百度搜索下载。
请注意64位Windows系统一定要下载64位vlc播放器,否则就找不到否则在建立主程序时就会报如下的错误。
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libvlc': JNA native support (win32-amd64/libvlc.dll) not found in resource path (F:\我的文档\JAVATEMP\MyVideoPlayer\bin;F:\我的文档\JAVATEMP\MyVideoPlayer\lib\jna-3.5.2.jar;F:\我的文档\JAVATEMP\MyVideoPlayer\lib\platform-3.5.2.jar;F:\我的文档\JAVATEMP\MyVideoPlayer\lib\vlcj-3.0.1.jar)at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)at com.sun.jna.Library$Handler.<init>(Library.java:142)at com.sun.jna.Native.loadLibrary(Native.java:387)at com.sun.jna.Native.loadLibrary(Native.java:366)at VideoPlayer.main.PlayerMain.main(PlayerMain.java:25)此错误就说明你下载的vlc播放器不是对应你系统的位数。
在官网下载的话好像都是32位的所以这个坎让我过的非常头疼。我在网上找到了vlc64位版,在此贴出下载地址。
2.下载完vlc播放器之后还需下载vlcj用里面的jar包来驱动vlc,这里给出vlcj的官网和下载地址。
如果上述下载地址失效,请进入官网
然后往下拉
红线标注的地方下载。
之后再下载slf4j,下载链接。
3.工具都准备好之后就开始着手搭建环境。
首先在你准备的工程下导入vlcj中的jna-4.1.0.jar,jna-platform-4.1.0.jar,vlcj-3.10.1.jar 和slf4j中的。如图:
如果不会导入jar包的话请看极客学院教学入门视频,索引为5.1.3外部库的导入与使用。
在你下载的vlc包的目录中找到libvlc.dll和libvlccore.dll这两个文件和plugins文件夹,把他们复制到你的Java项目中。
建立完整后的Java项目结构应该为
其中多出一个包,我也不知道是什么时候进去的,不用在意。
在开始前需要先开始写出主函数驱动起来vlc播放器。其代码如下:
public class PlayerMain {public static void main(String[] args) { NativeLibrary.addSearchPath( //此处的路径是你安装vlc的路径加上sdk和lib下面会给出详细解释 RuntimeUtil.getLibVlcLibraryName(), "d:\\VLC\\sdk\\lib"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class); }}我在输入路径的时候只输入到我的安装目录,比如我安装到D盘下的VLC文件夹下,如果在上述代码中写在"D:\\VLC"就会报错。一定要在你安装的主目录后面加上"\\sdk\\lib",比如我在添加之后就变为"D:\\VLC\\sdk\\lib",这和MAC系统是不同的请注意。
把主函数下的代码复制进去后会在几个句子下飘红线,说明你还没有导包,把鼠标放到红线下选择第一个解决方法就自动导包了,在导包完成和改好目录后就可以尝试运行 了。虽然不会发生任何的事,但是只要不报错就说明你的环境配置成功了,接下来就可以着手开发自己的播放器程序了。
开发代码
给出我做好的简易播放器的截图,大家可以根据自己的需要自己设计。
下面贴出我的代码,仅供参考:
import java.awt.EventQueue;import java.io.File;import javax.swing.JFileChooser;import javax.swing.SwingWorker;import com.LaoZhao.VideoPlayer.view.MyWindow;import com.sun.jna.Native;import com.sun.jna.NativeLibrary;import uk.co.caprica.vlcj.binding.LibVlc;import uk.co.caprica.vlcj.runtime.RuntimeUtil;public class PlayerMain {static MyWindow frame;public static void main(String[] args) { NativeLibrary.addSearchPath( RuntimeUtil.getLibVlcLibraryName(), "d:\\VLC\\sdk\\lib"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class); EventQueue.invokeLater(new Runnable() {public void run() {try {frame = new MyWindow();frame.setVisible(true);frame.getMediaPlayer().prepareMedia("d:\\HTML5播放器对比Flash插件.mp4");new SwingWorker<String , Integer>() {@Overrideprotected String doInBackground() throws Exception {while(true){long total = frame.getMediaPlayer().getLength();long curr = frame.getMediaPlayer().getTime();float percent = (float)curr/total;publish((int)(percent*100));Thread.sleep(100);}}protected void process(java.util.List<Integer> chunks) {for (int v:chunks) {frame.getProgressBar().setValue(v);}};}.execute();} catch (Exception e) {e.printStackTrace();}}});}//播放按钮public static void play(){frame.getMediaPlayer().play();}//暂停按钮public static void pause() {frame.getMediaPlayer().pause();}//停止按钮public static void stop(){frame.getMediaPlayer().stop();}//跳转按钮public static void jumpTo(float to){frame.getMediaPlayer().setTime((long)(to*frame.getMediaPlayer().getLength()));}//音量按钮public static void setvol(int v){frame.getMediaPlayer().setVolume(v);}//打开文件public static void openVideo(){JFileChooser chooser = new JFileChooser();int v = chooser.showOpenDialog(null);if (v== JFileChooser.APPROVE_OPTION) {File file = chooser.getSelectedFile();frame.getMediaPlayer().playMedia(file.getAbsolutePath());}}//退出public static void exit(){frame.getMediaPlayer().release();System.exit(0);}}
import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import com.LaoZhao.VideoPlayer.main.PlayerMain;import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;import javax.swing.JButton;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JProgressBar;import javax.swing.JMenuBar;import javax.swing.JMenu;import javax.swing.JMenuItem;import javax.swing.JSlider;import javax.swing.event.ChangeListener;import javax.swing.event.ChangeEvent;public class MyWindow extends JFrame {/** * */private static final long serialVersionUID = 1L;private JPanel contentPane;EmbeddedMediaPlayerComponent playerComponent;private JPanel panel;private JButton btnPlay;private JButton btnPause;private JButton btnStop;private JPanel controlpanel;private JProgressBar progress;private JMenuBar menuBar;private JMenu menu;private JMenuItem openmenu;private JMenuItem closemenu;private JSlider slider;/** * Launch the application. */public static void main(String[] args) {}/** * Create the frame. */public MyWindow() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 640, 480);menuBar = new JMenuBar();setJMenuBar(menuBar);menu = new JMenu("\u6587\u4EF6");menuBar.add(menu);openmenu = new JMenuItem("\u6253\u5F00");menu.add(openmenu);closemenu = new JMenuItem("\u9000\u51FA");menu.add(closemenu);openmenu.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {PlayerMain.openVideo();}});closemenu.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {PlayerMain.exit();}});contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));contentPane.setLayout(new BorderLayout(0, 0));setContentPane(contentPane);JPanel Videopanel = new JPanel();contentPane.add(Videopanel, BorderLayout.CENTER);Videopanel.setLayout(new BorderLayout(0, 0));playerComponent = new EmbeddedMediaPlayerComponent();Videopanel.add(playerComponent);panel = new JPanel();Videopanel.add(panel, BorderLayout.SOUTH);panel.setLayout(new BorderLayout(0, 0));controlpanel = new JPanel();panel.add(controlpanel);btnStop = new JButton("stop");controlpanel.add(btnStop);btnPlay = new JButton("play");controlpanel.add(btnPlay);btnPause = new JButton("pause");controlpanel.add(btnPause);slider = new JSlider();slider.setValue(100);slider.setMaximum(120);slider.addChangeListener(new ChangeListener() {public void stateChanged(ChangeEvent e) {PlayerMain.setvol(slider.getValue());}});controlpanel.add(slider);progress = new JProgressBar();progress.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {int x=e.getX();PlayerMain.jumpTo(((float)x/progress.getWidth()));}});progress.setStringPainted(true);panel.add(progress, BorderLayout.NORTH);btnPause.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {PlayerMain.pause();}});btnPlay.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {PlayerMain.play();}});btnStop.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {PlayerMain.stop();}});}public EmbeddedMediaPlayer getMediaPlayer() {return playerComponent.getMediaPlayer();}public JProgressBar getProgressBar(){return progress;}}
第一次撰写技术性文章,欢迎指出我的错误。
阅读全文
0 0
- 在Java(Windows系统)中实现vlc播放器功能
- VS2008下VLC播放器,实现播放、暂停、停止、快进、截图、进度条显示、进度条控制功能
- DTSCD 在VLC中播放原因
- windows 下VLC播放器应用之(三)------VLC-1.1.4命令行使用帮助
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)
- HTML中实现VLC播放器并对播放器进行控制
- 在Ubuntu下安装VLC播放器
- 在Linux上安装VLC播放器
- 在CentOS7 1708安装VLC播放器
- VLC 实现的简单播放器
- windows系统中搜索功能MFC实现
- html中嵌入VLC播放器
- 播放器的歌词功能实现中。。。
- leetcode-40. Combination Sum II
- [LeetCode]27. Remove Element
- Cube Stacking(POJ-1988)
- C--模块四--运算符与表达式
- 什么是透传技术
- 在Java(Windows系统)中实现vlc播放器功能
- 2017计蒜之道 初赛 第一场
- 2017 计蒜之道 初赛 第一场
- JAVA 对象引用,以及对象赋值
- DNS在架构设计中的巧用
- chromium can not run as root
- Slim中使用Controller
- Valgrind总结(1) —— 概述
- jsp^jstl&el