最近有个多媒体的作业,要求使用visualC++和opencv编写一个简易的视屏播放器,对于C/C++残疾者而言是不可能的,于是萌生了用java编写的想法。具体经验分享一下。

目标:制作简易视屏播放器

开发工具:eclipse4.5.1;VLC2.2.1

具体内容:完成了视屏的加载、播放、退出的功能;实现了视屏播放过程中控制播放进程;实现播放过程中控制暂停。

最终程序效果图如下:

开发过程参考学习资源:极客学院视屏教程http://www.jikexueyuan.com/course/248_1.html?ss=1;

Java framework for the vlc media playerhttp://capricasoftware.co.uk/#/projects/vlcj

GitHub

一、环境配置,也是最重要的一步,如果开发环境没有配置好的话,其他的事都是瞎扯淡。

1.下载vlc(点击打开下载vlc链接:http://www.videolan.org/),下载自己电脑系统对应的版本并安装;

2.下载vlcj(点击打开下载vlcj链接http://capricasoftware.co.uk/#/projects/vlcj),把下载文件解压后将其目录下的

jna-3.5.2.jar、platform-3.5.2.jar、vlcj-3.8.0.jar(不同版本后缀数字可能会不同)三个文件复制到对应的java工程目录(新建 lib 文件夹)下;

3.下载slf4j(点击打开slf4j下载链接http://www.slf4j.org/),下载文件后解压将其目录下的slf4j-api-1.7.13.jar、

slf4j- nop-1.7.13.jar(不同版本后缀数字可能会不同)两个文件复制到对应的java工程目录(新建 lib 文件夹)下;

4. 将vlc安装目录下的libvlc.dll、libvlccore.dll 两个文件以及plugins问佳佳复制到对应的java工程目录下;

至此,环境文件的导入已经基本完成。进入eclipse将lib文件夹下面的5个 .jar 文件添加到工作路径。完成后java工程的目录结构如下:

java工程下的包里是具体的程序实现代码。

二.各种环境文件导入java工程之后还需要配置一下才可能够配置到最终的工作环境。

1.在java工程下新建两个包,分别存放程序主文件和窗体文件。在在主程序包下建一个主类,主类的main函数作如下配置:


 public static void main(String[] args) {//环境配置,将vlc sdk导入到eclipse//if(RuntimeUtil.isWindows()){     }NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "D:\\Program Files\\VideoLAN\\VLC\\sdk\\lib"); //导入的路径是vlc的安装路径Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);//System.out.println(LibVlc.INSTANCE.libvlc_get_version());
}

b保存后运行一下改程序,如果不报错的话则说明开发环境已经配置完成。如果报错的话可以参照上文提到的参考学习资源解决问题。

三.接下来就是具体的编码环节了,有问题可以参照java学习工具。

具体代码如下:

主文件类PlayerMain:

/*主程序*/package VideoPlayer.Main;import java.awt.EventQueue;
import java.io.File;import javax.swing.JFileChooser;
import javax.swing.SwingWorker;import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;import VideoPlayer.Window.Window;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;public class PlayerMain {static Window frame;//private static final String NATIVE_LIBRARY_SEARCH_PATH = "D:\\Program Files\\VideoLAN\\VLC\\sdk\\lib";public static void main(String[] args) {//环境配置,将vlc sdk导入到eclipse//if(RuntimeUtil.isWindows()){                   }NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "D:\\Program Files\\VideoLAN\\VLC\\sdk\\lib"); //导入的路径是vlc的安装路径Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);//System.out.println(LibVlc.INSTANCE.libvlc_get_version());//创建主程序界面运行窗体EventQueue.invokeLater(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry{frame=new Window();frame.setVisible(true);//frame.getMediaPlayer().playMedia("F:\\Videos\\Let.mp4");   //直接播放视屏,参数是视屏文件的绝对路径frame.getMediaPlayer().prepareMedia("F:\\Videos\\Let_It_Go.mp4");       //控制播放视屏new SwingWorker<String, Integer>() {@Overrideprotected String doInBackground() throws Exception {// TODO Auto-generated method stubwhile (true) { //获取视频播放进度并且按百分比显示long total=frame.getMediaPlayer().getLength();long curr=frame.getMediaPlayer().getTime();float percent=(float)curr/total;publish((int)(percent*100));Thread.sleep(100);}  //return null;}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 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);}//实现播放按钮的方法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);}}

窗体文件类Window:

/*视屏播放器主界面*/package VideoPlayer.Window;import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JSlider;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;import VideoPlayer.Main.PlayerMain;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;public class Window extends JFrame{private JPanel contentPane;    //顶层容器,整个播放页面的容器private JMenuBar menuBar;    //菜单栏private JMenu mnFile,mnSetting,mnHelp; //文件菜单private JMenuItem mnOpenVideo,mnExit; //文件菜单子目录,打开视屏、退出private JPanel panel;   //控制区域容器private JProgressBar progress;  //进度条private JPanel progressPanel;  //进度条容器private JPanel controlPanel; //控制按钮容器private JButton btnStop,btnPlay,btnPause;   //控制按钮,停止、播放、暂停private JSlider slider;       //声音控制块EmbeddedMediaPlayerComponent playerComponent;    //媒体播放器组件public static void main(String[] args) {}//MainWindow构造方法,创建视屏播放的主界面public Window(){setTitle("   VideoPlayer   Copyright@2015  by 南柯一梦");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(200,80,900,600);contentPane=new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));contentPane.setLayout(new BorderLayout(0,0));setContentPane(contentPane);/*视频播放窗口中的菜单栏*/menuBar=new JMenuBar();setJMenuBar(menuBar);mnFile=new JMenu("文件");       //设置菜单名menuBar.add(mnFile);mnSetting=new JMenu("设置");menuBar.add(mnSetting);mnHelp=new JMenu("帮助");menuBar.add(mnHelp);mnOpenVideo =new JMenuItem("打开文件");  //设置文件菜单子目录打开文件mnFile.add(mnOpenVideo);mnExit =new JMenuItem("退出"); //设置文件菜单子目录退出mnFile.add(mnExit);//打开文件mnOpenVideo.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPlayerMain.openVideo();}});//退出mnExit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPlayerMain.exit();}});/*视屏窗口中播放界面部分*/JPanel videoPane=new JPanel();contentPane.add(videoPane, BorderLayout.CENTER);videoPane.setLayout(new BorderLayout(0,0));playerComponent=new EmbeddedMediaPlayerComponent();videoPane.add(playerComponent);/*视屏窗口中控制部分*/panel=new JPanel();      //实例化控制区域容器videoPane.add(panel,BorderLayout.SOUTH);progressPanel=new JPanel();  //实例化进度条容器panel.add(progressPanel, BorderLayout.NORTH);//添加进度条progress=new JProgressBar();  progressPanel.add(progress);//panel.add(progress,BorderLayout.NORTH);progress.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e){     //点击进度条调整视屏播放进度int x=e.getX();PlayerMain.jumpTo((float)x/progress.getWidth());}});progress.setStringPainted(true);controlPanel=new JPanel();        //实例化控制按钮容器panel.add(controlPanel,BorderLayout.SOUTH);//添加停止按钮btnStop=new JButton("停止");btnStop.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubPlayerMain.stop();}});controlPanel.add(btnStop);//添加播放按钮btnPlay=new JButton("播放");btnPlay.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubPlayerMain.play();}});controlPanel.add(btnPlay);//添加暂停按钮btnPause=new JButton("暂停");btnPause.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubPlayerMain.pause();}});controlPanel.add(btnPause);//添加声音控制块slider=new JSlider();slider.setValue(80);slider.setMaximum(100);slider.addChangeListener(new ChangeListener() {@Overridepublic void stateChanged(ChangeEvent e) {// TODO Auto-generated method stubPlayerMain.setVol(slider.getValue());}});controlPanel.add(slider);}//获取播放媒体实例(某个视频)public EmbeddedMediaPlayer getMediaPlayer() {return playerComponent.getMediaPlayer();}//获取进度条实例public JProgressBar getProgressBar() {return progress;}}

至此使用java开发简易的视屏播放器就已经完成了。

2015年12月28日     By 南柯一梦

使用java创建一个简易的视屏播放器相关推荐

  1. java 生成media_使用java创建一个简易的视屏播放器

    最近有个多媒体的作业,要求使用visualC++和opencv编写一个简易的视屏播放器,对于C/C++残疾者而言是不可能的,于是萌生了用java编写的想法.具体经验分享一下. 目标:制作简易视屏播放器 ...

  2. Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)(转载)

    转载自:<Android 实现视屏播放器.边播边缓存功能.外加铲屎(IJKPlayer)> hello,大家好,我就是那个会掀桌子的话唠,刚刚结束两篇关于音频播放与录制的文章,旧坑未埋就挖 ...

  3. Android 实现视屏播放器、边播边缓存功能,附源码

    热文导读 | 点击标题阅读 [墙裂推荐]AndroidVideoCache:实现视屏播放边下边播 吊炸天!74款APP完整源码! 一份年薪30万的Android面试宝典,附答案 来源:http://w ...

  4. 用python写的一个简易的云音乐播放器

    本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了github上他人写的一个汉字转拼音的库,大家可以在github上找到. #co ...

  5. 使用AVPlaer创建视屏播放器

    //#PlayerView.m文件中 #import "PlayerView.h" #import <AVFoundation/AVFoundation.h> #imp ...

  6. Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)

    hello,大家好,我就是那个会掀桌子的话唠,刚刚结束两篇关于音频播放与录制的文章,旧坑未埋就挖新坑,还望多多关照.最近累趴了,周末果断休假. </p> 快看,用力戳它:https://g ...

  7. android studio 视屏播放器 MediaController

    url来自raw文件中,自己放进去的Mp4: 视屏可以拖动进度条: XML: <?xml version="1.0" encoding="utf-8"?& ...

  8. 创建一个全功能的FLV播放器

    我们将制作的这个FLV播放器由这样几部分组成: 一个用于显示视频图像的视频对象, 三个分别用于播放.暂停和停止视频的按钮, 以及一个用于显示缓冲区装载进度的动态文本. 1. 创建三个按钮元件,分别命名 ...

  9. web音频播放器_Web设计:如何创建一个时尚的Web音频播放器

    我仍然记得在2000年代初,在线播放富媒体(音频和视频)时遇到了很多限制. 很容易就将开始视为理所当然,尤其是自从今天以来,我们有很多商店可以播放音频,例如last.fm或播放视频,例如Youtube ...

最新文章

  1. 微信小程序实现滑动翻页效果源码附效果图
  2. OKR和KPI有什么区别?一篇文章搞懂
  3. boost::mp11::mp_is_list相关用法的测试程序
  4. 【已解决】[Error] cannot pass objects of non-trivially-copyable type ‘std::string {aka class std::basic_s
  5. svn上传报Authorization failed错误解决办法
  6. 牛客 2021年度训练联盟热身训练赛第二场 E题NIH Budget
  7. 撤销commit且未push操作的git命令
  8. nginx upstream配置_效率倍增!网易杭研Nginx自动扩缩容实践
  9. vux页面转换html,Vue 初学者使用 Vux 前端开发框架 - 文章教程
  10. [zkaq靶场]FineCMS的存储型XSS
  11. 【洛谷】P1428:小鱼比可爱
  12. vue中使用ajax全局配置,jQuery和vue 设置ajax全局请求
  13. Plague Inc
  14. 小米 2022校招 java后端一面凉经(55min)
  15. django-simple-sso, django-auth-ldap, python-ldap 单点登录(一)
  16. JavaScript——案例(游戏中的倒计时、暂停和停止)
  17. 丁小平:浅谈科学模型及突变论等问题
  18. 沧州一中高考2021成绩查询,沧州一中2019高考喜报成绩、一本二本上线人数情况...
  19. Centos Linux没有显示IP
  20. Py之rgf_python:rgf_python的简介、安装、使用方法之详细攻略

热门文章

  1. 收藏栏被恶意软件修改
  2. Js将带声调的拼音转不带声调的拼音
  3. Python过年倒计时 倒计时窗口 python实现倒计时
  4. append是什么意思java_为什么StringBuilder#append(int)在Java 7中比在Java 8中更快?
  5. 全国主要城市空气质量热点图
  6. 【Nowcoder】牛客小白月赛26 H 保卫家园 | 贪心、扫描线
  7. 几款微博同步工具比较
  8. 计算多项式值的秦九韶算法
  9. gitlab代码提交
  10. AIX下批量替换文件中的字符串 linux替换包含换行符的内容