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

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

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

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

最终程序效果图如下:

开发过程参考学习资源:

GitHub

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

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

2.下载vlcj(点击打开下载vlcj链接),把下载文件解压后将其目录下的

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

3.下载slf4j(点击打开slf4j下载),下载文件后解压将其目录下的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() {

@Override

public void run() {

// TODO Auto-generated method stub

try{

frame=new Window();

frame.setVisible(true);

//frame.getMediaPlayer().playMedia("F:\\Videos\\Let.mp4"); //直接播放视屏,参数是视屏文件的绝对路径

frame.getMediaPlayer().prepareMedia("F:\\Videos\\Let_It_Go.mp4"); //控制播放视屏

new SwingWorker() {

@Override

protected String doInBackground() throws Exception {

// TODO Auto-generated method stub

while (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 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() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

PlayerMain.openVideo();

}

});

//退出

mnExit.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

PlayerMain.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() {

@Override

public 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() {

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

PlayerMain.stop();

}

});

controlPanel.add(btnStop);

//添加播放按钮

btnPlay=new JButton("播放");

btnPlay.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

PlayerMain.play();

}

});

controlPanel.add(btnPlay);

//添加暂停按钮

btnPause=new JButton("暂停");

btnPause.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

PlayerMain.pause();

}

});

controlPanel.add(btnPause);

//添加声音控制块

slider=new JSlider();

slider.setValue(80);

slider.setMaximum(100);

slider.addChangeListener(new ChangeListener() {

@Override

public void stateChanged(ChangeEvent e) {

// TODO Auto-generated method stub

PlayerMain.setVol(slider.getValue());

}

});

controlPanel.add(slider);

}

//获取播放媒体实例(某个视频)

public EmbeddedMediaPlayer getMediaPlayer() {

return playerComponent.getMediaPlayer();

}

//获取进度条实例

public JProgressBar getProgressBar() {

return progress;

}

}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java 视频播放_java创建简易视频播放器相关推荐

  1. java视频播放器制作_java创建简易视频播放器

    java创建简易视频播放器 发布时间:2020-09-23 04:28:09 来源:脚本之家 阅读:98 作者:南柯一梦xihe 最近有个多媒体的作业,要求使用visualC++和OpenCV编写一个 ...

  2. java media player_MediaPlayerForJava(创建一个视频播放器)

    利用VLC自制一个java视频播放器 1.下载相关文件 1.1 下载vlc播放器 1.1.1 必须匹配Java 虚拟机的CPU体系结构和本机LibVLC库 - 如果使用32位JVM,则必须使用32位版 ...

  3. 简单音频播放器java代码_Java实现简易音乐播放器

    //此程序实现mid.wav格式音频文件的播放 //暂时只实现了单曲播放功能 //选项>其它功能会后继添加 //Version 1.0 // @author Zha_yongchun // Em ...

  4. 扑克牌java发牌_Java练习——扑克牌发牌器

    Java练习--扑克牌发牌器 声明:学习自其他博主,感谢分享,这里自己也写了一下. 实现思路 - 构建一张扑克牌 - 构建一套扑克牌 - 测试 构建一张扑克牌 /***@author冬冬 * 定义一个 ...

  5. 扑克牌游戏java代码_java实现简易扑克牌游戏

    本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下 游戏功能描述 1.创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 2. ...

  6. java 人事_java版简易人事管理系统

    [实例简介] 通过对java的学习.用开发工具开发的一款简易人事管理系统 [实例截图] [核心代码] 386393HMSs └── HMSs ├── bin │   ├── com │   │   └ ...

  7. 发扑克牌java程序_Java实现简易扑克牌游戏

    功能描述 1.创建扑克牌.包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王. 2.创建两个玩家.包括玩家id.姓名.手牌等集合,手牌为扑克牌的集合. 3.洗牌. ...

  8. java联机_Java实现简易联网坦克对战小游戏

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

  9. java散点图_Java 创建 Excel 散点图

    散点图是研究数据分布时常用的一种工具,通过观察散点图中坐标点的位置,可以帮助用户更加清晰直观的判断变量间是否存在关联关系. 本文将介绍如何使用Free Spire.XLS for Java 在Exce ...

  10. 学生类java程序_java 创建学生类

    创建一个学生类,属性包括学生姓名,学号,性别及4门课成绩,方法包括计算学生总分和显示学生的相关信息. import java.util.*; class Student{ String name; S ...

最新文章

  1. 盘点——那些你不能不知道的自动化测试面试题
  2. OSS控制台集成将数据库实时备份到OSS的功能
  3. 谷歌发布TF新工具:计算速度提升2倍,减少无效参数
  4. spark指定python版本_1.Spark学习(Python版本):Spark安装
  5. 关于maven pom
  6. java中13%(-3)_Java面试题汇总(十三)《算法分析及手写代码661-675》
  7. 手机应用的照相录像功能,为什么转到后台就不能工作了?
  8. 协议栈 状态机 java_TCP状态机《LwIP协议栈源码详解——TCP/IP协议的实现》
  9. win10怎么将计算机放桌面壁纸,windows10自带壁纸在哪里_win10电脑自带的桌面壁纸保存在哪...
  10. 2016OSC源创会年终盛典-综合技术专场-惠新宸
  11. 职场001 什么时候跳槽
  12. 机器学习模型上线及优化流程
  13. 【商业信息】PNP ID注册名单 2019-05-21
  14. 加入先进制造的追光者-探索现代机械设计团队的高效协作方式
  15. jqGrid基本使用
  16. day28 re(正则)模块
  17. C 语言实例 - 输入n个整数,使其从大到小输出
  18. Promise all用法
  19. 机器人计算机作文,关于机器人的作文5篇
  20. TYVJ P1234 - bench与奔驰

热门文章

  1. 廖雪峰python教程杨辉三角_打印杨辉三角(廖雪峰python教程)
  2. 二维码扫码登陆流程设计
  3. 【产品经验谈】详解Axure中的默认元件库
  4. 2022年中国游戏行业投融资发展报告
  5. 《零基础作曲编曲完全教程》(合辑)崛起的卧室音乐人 编曲教程 作曲教程精进篇
  6. PIC温控器c语言程序,PIC单片机温感器DS18B20 C语言程序代码
  7. fritzing导入元件_fritzing元件库下载-fritzing传感器元件库v0.9.3 中文版 - 极光下载站...
  8. VMware 虚拟机安装系统
  9. IP地址归属地那些事
  10. kali linux 黑别人电脑,如何使用 Kali Linux 黑掉 Windows