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

目标:制作简易视频播放器
开发工具:eclipse4.5.1;VLC2.2.1
具体内容:完成了视频的加载、播放、退出的功能;实现了视频播放过程中控制播放进程;实现播放过程中控制暂停。
最终程序效果图如下:
开发过程参考学习资源:
极客学院视屏教程
Java framework for the vlc media player
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<String, Integer>() {
@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<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() {
@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 实现音乐播放器的简单实例
# java音乐播放器课程设计
# 简单实现java音乐播放器
# 一个简单的Java音乐播放器
# 利用java制作简单的音乐播放器
# java音乐播放器编写源码
# Java利用VLC开发简易视屏播放器功能
# 视屏
# 进度条
# 主程序
# 目录下
# 视频播放
# 报错
# 窗口中
# 媒体播放器
# 打开下载
# 过程中
# 导入到
# 完成了
# 有个
# 最重要
# 其他的
# 将其
# 解决问题
# 还需要
相关文章:
如何高效利用亚马逊云主机搭建企业网站?
如何在橙子建站上传落地页?操作指南详解
如何通过西部数码建站助手快速创建专业网站?
,网页ppt怎么弄成自己的ppt?
Python如何创建带属性的XML节点
建站主机CVM配置优化、SEO策略与性能提升指南
网站图片在线制作软件,怎么在图片上做链接?
建站之星如何助力网站排名飙升?揭秘高效技巧
,怎么在广州志愿者网站注册?
建站主机如何安装配置?新手必看操作指南
行程制作网站有哪些,第三方机票电子行程单怎么开?
建站之星2.7模板快速切换与批量管理功能操作指南
如何在腾讯云服务器上快速搭建个人网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
手机网站制作与建设方案,手机网站如何建设?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
视频网站制作教程,怎么样制作优酷网的小视频?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
建站之星在线客服如何快速接入解答?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
建站之星代理商如何保障技术支持与售后服务?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何在IIS中新建站点并配置端口与IP地址?
如何确保西部建站助手FTP传输的安全性?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
为什么Go需要go mod文件_Go go mod文件作用说明
如何在阿里云通过域名搭建网站?
北京制作网站的公司,北京铁路集团官方网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
成都网站制作报价公司,成都工业用气开户费用?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
小程序网站制作需要准备什么资料,如何制作小程序?
如何快速建站并高效导出源代码?
三星网站视频制作教程下载,三星w23网页如何全屏?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何快速搭建响应式可视化网站?
如何快速搭建二级域名独立网站?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
建站之星代理如何获取技术支持?
如何用腾讯建站主机快速创建免费网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
建站主机类型有哪些?如何正确选型
制作表格网站有哪些,线上表格怎么弄?
浅谈Javascript中的Label语句
建站主机空间推荐 高性价比配置与快速部署方案解析
建站之星代理费用多少?最新价格详情介绍
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在橙子建站中快速调整背景颜色?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何通过PHP快速构建高效问答网站功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。