第一步:初步的配置过程

 1.到vlcj官网下载最新版的vlcj官网地址:http://capricasoftware.co.uk/#/projects/vlcj/tutorial,最好在这个网址里看一下最新版的说明,看看vlcj支持的VLC版本;2.到VLC官网下载对应版本的VLC:http://www.videolan.org/3.到https://www.slf4j.org/下载最新版本的slf4j**注:采用jna-4的版本的时候,可能会出现找不到vlc的报错的兼容性问题,可采用换为低版本的jna解决;**4.在Eclipse下新建Java项目,将下载的vclj下的三个个jar包:jna-3.5.2.jar,platform-3.5.2.jar,vlcj-3.0.1.jar(我下载的版本是vlcj3.0.1的)和slf4j下的 slf4j-api-1.7.25.jar 、slf4j-nop-1.7.25.jar放到工程目录的l新建的lib文件夹中,并添加到你项目的BuildPath中;
(我采用最新版本的时候出现了找不到VLC报错问题,故换成了低版本的了)
5、两种主要且最可靠的方法来帮助vlcj发现LibVLC本机库的位置,若打印出了版本信息,则成功获取了
第一种方式 - 自动本机发现
package tutorial;import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;public class Tutorial {public static void main(String[] args) {boolean found = new NativeDiscovery().discover();System.out.println(found);System.out.println(LibVlc.INSTANCE.libvlc_get_version());}
}

第二种方式- 显式库路径

package tutorial;import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;import com.sun.jna.NativeLibrary;public class Tutorial {private static final String NATIVE_LIBRARY_SEARCH_PATH = "/home/vlc";public static void main(String[] args) {NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), NATIVE_LIBRARY_SEARCH_PATH);System.out.println(LibVlc.INSTANCE.libvlc_get_version());}
}

二、程序的编写
说明:创建了两个类一个为主程序,一个为窗体类
主程序:

package com.jike.myvideoplayer.main;import java.awt.EventQueue;
import java.io.File;import javax.swing.JFileChooser;
import javax.swing.SwingWorker;
import javax.swing.filechooser.FileNameExtensionFilter;import com.jike.myvideoplayer.view.PlaymainJframe;
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 Playmain {static  PlaymainJframe frame;private static final String NATIVE_LIBRARY_SEARCH_PATH = "D:\\java\\VLC";public static void main(String[] args) {//判断系统,设置vlc的使用路径
//      if(RuntimeUtil.isWindows()) {NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), NATIVE_LIBRARY_SEARCH_PATH);//System.out.println(LibVlc.INSTANCE.libvlc_get_version());
//      }else if(RuntimeUtil.isMac()) {//如果是苹果系统
//          NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "D:\\java\\VLC\\sdk\\lib");
//      //}else if(RuntimeUtil.isNix()) {
//          NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "D:\\java\\VLC\\sdk\\lib");
//      }//加载VLC播放器的系统库Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);EventQueue.invokeLater(new Runnable() {public void run() {try {frame = new PlaymainJframe();frame.setVisible(true);//设置字幕编码//String option[]= {"--subsdec-encoding=GB18030"};//自动播放//frame.getPlay().playMedia("Airplane!.1980..双语字幕.HR-HDTV.AC3.1024X576.x264-人人影视制作.mkv");//不自动播放,只是放置了视频文件frame.getPlay().prepareMedia("Airplane!.1980..双语字幕.HR-HDTV.AC3.1024X576.x264-人人影视制作.mkv");//全屏播放//frame.getPlay().toggleFullScreen();//利用进度条来显示当前进度new SwingWorker<String, Integer>() {@Overrideprotected String doInBackground() throws Exception {while(true) {//持续获取。不断更新//获取视频的全部长度long totall=frame.getPlay().getLength();//获取视频当前的长度long curr=frame.getPlay().getTime();//获取长度的百分比float prent=(float)curr/totall;publish((int)(prent*100));//获得的值才能使0-100Thread.sleep(100);//每隔一毫秒获取一次}//return null;}protected void process(java.util.List<Integer> chunks) {for(int v:chunks) {frame.getprogress().setValue(v);//设置进度条当前显示的进度}}; }.execute();//启动进程} catch (Exception e) {e.printStackTrace();}}});}public static void play() {//播放frame.getPlay().play();}public static void pause() {//暂停frame.getPlay().pause();}public static void stop() {//停止frame.getPlay().stop();}public static void timeto(float to) {//跳转到某一个时间点frame.getPlay().setTime((long) (to*frame.getPlay().getLength()));//System.out.println(frame.getPlay().getLength());}public static void setvol(int v) {//设置播放器的声音frame.getPlay().setVolume(v);}public static void openfile() {//打开视频文件JFileChooser chooser=new JFileChooser();//只能选择的视频文件类型FileNameExtensionFilter filter=new FileNameExtensionFilter("Allowed file", "mvk","ogg","mp4");chooser.setFileFilter(filter);int v=chooser.showOpenDialog(null);if(v==JFileChooser.APPROVE_OPTION) {File file=chooser.getSelectedFile();frame.getPlay().playMedia(file.getAbsolutePath());}}public static void openstutitle() {//打开视频字幕文件JFileChooser chooser=new JFileChooser();int v=chooser.showOpenDialog(null);if(v==JFileChooser.APPROVE_OPTION) {File file=chooser.getSelectedFile();frame.getPlay().setSubTitleFile(file);}}public static void exit() {//退出frame.getPlay().release();//释放视频资源System.exit(0);//退出系统}}

窗体类

package com.jike.myvideoplayer.view;import java.awt.BorderLayout;
//import java.awt.EventQueue;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;import com.jike.myvideoplayer.main.Playmain;import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import javax.swing.JButton;
import javax.swing.JProgressBar;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
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 PlaymainJframe extends JFrame {private JPanel contentPane;//设置播放器界面的对象EmbeddedMediaPlayerComponent playerComponent;private JPanel panel;private JButton button;private JButton button_1;private JButton button_2;private JPanel panel_1;private JProgressBar progressBar;private JMenuBar menuBar;private JMenu mnFile;private JMenuItem mntmOpenFile;private JMenuItem mntmOpenSt;private JMenuItem mntmExit;private JSlider slider;/*** Launch the application.*/public static void main(String[] args) {}/*** Create the frame.*/public PlaymainJframe() {setTitle("This my video");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 682, 422);menuBar = new JMenuBar();setJMenuBar(menuBar);mnFile = new JMenu("file");menuBar.add(mnFile);mntmOpenFile = new JMenuItem("open file");mnFile.add(mntmOpenFile);mntmOpenSt = new JMenuItem("open stutitle");mnFile.add(mntmOpenSt);mntmExit = new JMenuItem("EXIT");mnFile.add(mntmExit);//打开文件mntmOpenFile.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Playmain.openfile();}});//打开字幕文件mntmOpenSt.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Playmain.openstutitle();}});//退出操作mntmExit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Playmain.exit();}});contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(new BorderLayout(0, 0));JPanel videopanel = new JPanel();contentPane.add(videopanel);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));panel_1 = new JPanel();panel.add(panel_1);button = new JButton("\u6682\u505C");button.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {//调用暂停方法Playmain.pause();}});panel_1.add(button);button_1 = new JButton("\u5F00\u59CB");button_1.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {//调用播放方法Playmain.play();}});panel_1.add(button_1);button_2 = new JButton("\u505C\u6B62");button_2.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {//调用停止方法Playmain.stop();}});panel_1.add(button_2);slider = new JSlider();slider.setValue(100);slider.setMaximum(120);slider.addChangeListener(new ChangeListener() {public void stateChanged(ChangeEvent e) {Playmain.setvol(slider.getValue());//获取滑块的值,来赋值给播放器的音量}});panel_1.add(slider);progressBar = new JProgressBar();progressBar.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {//通过点击进度条的当前位置来控制视频的播放进度//获取鼠标的位置int x=e.getX();Playmain.timeto((float)x/progressBar.getWidth());//System.out.println((float)x/progressBar.getWidth());}});progressBar.setStringPainted(true);panel.add(progressBar, BorderLayout.NORTH);//videopanel.add(playerComponent);}public EmbeddedMediaPlayer getPlay(){return playerComponent.getMediaPlayer();}public JProgressBar getprogress() {return progressBar;}}

三、运行结果

四、项目遇到的问题以及解决方式

1、视频无法播放问题(最主要的是配置的问题)
我下载的是最新版本的VLC,在导入VLC的路径的时候只需要导入VLC这个播放器的应用程序的路径就可以
(对于一些老版本的有SDK文件夹,则路径就需要到达这个文件夹下的lib文件夹了)

下载的vlcj的最新版本可能不能兼容VLC,所以可以选择下载低版本的
:其他的配置方式
以下是我看的网上的一些配置方式方式,但我试过的是没有用的,但或许对大家 有用,就收集在这里的,仅供参考

  1. 动态链接库*.dll:将安装目录下的libvlc.dll,libvlccore.dll以及plugins目录下的所有文件,全部导入项目文件下
    PS:VLC支持非常多的plugin。因此plugins目录的体积确实是非常大的。
  2. 静态链接库*.lib:将安装目录/sdk/lib这个路径写在代码里
  3. 头文件*.h:安装目录/sdk/include
3、视频黑屏问题
视频文件路径和项目的路径必须在同一个文件夹下(我是windows系统)
输入视频路径的时候需要完整的视频路径即绝对路径,有时候也只需要相对路径也是可行的(这个要视不同视频的格式而定,对于ogg格式的需要绝对路径,对于mvk格式的需要相对路径)
注意路径内不要有空格

参考资料:

JAVA项目——VLC视频播放器相关推荐

  1. C# VLC视频播放器

         1:vlc的plugins目录太大,没有上传,你可以自己添加vlc的plugins目录里面的插件 2:添加libvlc.dll.libvlccore.dll 两个文件 libvlc接口: # ...

  2. android 实现视频播放功能,Android项目实现视频播放器

    本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...

  3. linux视频播放器vlc,Centos7.2下安装VLC视频播放器

    最近,打算在centos7.2上安装一个叫MPlayer的视频播放器,但是折腾好久,得到的结果只是可以播放,但是却没有声音.无奈之下另寻他路.最后选择安装VLC视频播放器. 我的linux版本是cen ...

  4. java课程设计视频播放器_在Java实现视频播放器(vlc)

    学习Java几个月,刚刚入门.昨天看到极客学院的Java的入门视频最后有一个简易播放器的制作,因为最近学校要做一个项目,正好需要加入一个视频播放器,就按照视频的方法来做,但是在做时发现N多问题,都是在 ...

  5. 【Java】简易视频播放器

    [效果图] [功能] 1.当窗口获取焦点后,按空格暂停/播放 2.原速播放键.暂停/播放键.倍速播放键(最高3倍速,每次递增0.5) 3.进度条可点击选择播放位置 4.时间显示.播放速度显示 [项目与 ...

  6. VLC视频播放器原理详细分析含TS流格式分析

    vlc是一个功能强大的玩意,能做很多有意思的事情. 最简单的,从界面打开一个文件播放,也可以在命令行下使用,如 C:\Program Files\VideoLAN\VLC>vlc.exe tes ...

  7. linux下qt实现vlc视频播放器,Qt封装本地视频播放器(VLC二次开发)

    Qt本地视频播放器 1.使用vlc官方sdk封装,并在QLabel上面播放 2.首先到vlc官网下载vlc的sdk环境,下载地址:http://download.videolan.org/pub/vi ...

  8. 个人项目---音乐视频播放器

    项目背景:一个公共的音乐视频播放器,用户通过上传歌曲或视频分享自己喜欢的音乐和视频,也可以把列表中的音乐或视频添加为喜欢,支持模糊查询等功能. 基本功能: 新用户注册 老用户登录 主界面中能看到当前系 ...

  9. QML VLC视频播放器

    基于VLC 和QML 的视频播放器 一,效果 二,代码 import QtQuick 2.0 import VLCQt 1.0 import QtQuick.Controls 2.3Item {id: ...

最新文章

  1. [Bash Shell] Shell学习笔记
  2. 使用Java Servlet,JSP标签和Stormpath快速构建Java Web App
  3. java变量用来干嘛_Java
  4. 二叉搜索树(二叉排序树)
  5. 提取数据_Origin如何提取图片数据
  6. 操作系统—死锁的避免
  7. Android or java https ssl exception
  8. 遍历出List<Map>的Key / Value
  9. 微信账户在服务器删除不了怎么办,微信号注销不了怎么办 账户无法永久注销解决方法...
  10. c语言我喜欢你,【幻 仿】UC启动时的我喜欢你
  11. LEDE 源码下载与编译
  12. TortoiseSVN服务器端下载及使用方法
  13. 相亲角、地摊,暗访小县城的夜市
  14. Linux文件写入读取与关闭(二)
  15. 数据结构(C语言版 第2版)课后习题答案 严蔚敏 等 编著
  16. oracle关于索引
  17. CSDN超简单的上传gif动图方法
  18. 荣耀接盘者传闻多多,但最可能接盘的是神州数码
  19. java的action_JavaWeb(action层)
  20. Win11怎么彻底卸载Xbox Game Bar?

热门文章

  1. Sitara AM335x通用EVM硬件用户指南
  2. 怎么查看网页中的密码
  3. QQ:登录超时,请检查您的网络或者本机防火墙设置。 (错误码:Ox00000001)
  4. GitHub上史上最全的Android开源项目分类汇总
  5. dnf服务器未响应win7,win7系统dnf经常未响应的解决方法
  6. 软件项目估算之代码行估算方法
  7. 模拟登录模块以及获取cookie
  8. 中级Android面试总结之Android篇
  9. 全数据驱动产品优化,美国互联网公司A/B测试经验分享
  10. eclipse导入图片不显示是什么原因