java创建简易视频播放器
最近有个多媒体的作业,要求使用visualc++和opencv编写一个简易的视频播放器,对于c/c++残疾者而言是不可能的,于是萌生了用java编写的想法。具体经验分享一下。
目标:制作简易视频播放器
开发工具:eclipse4.5.1;vlc2.2.1
具体内容:完成了视频的加载、播放、退出的功能;实现了视频播放过程中控制播放进程;实现播放过程中控制暂停。
最终程序效果图如下:
开发过程参考学习资源:
java framework for the vlc media player
github
一、环境配置,也是最重要的一步,如果开发环境没有配置好的话,其他的事都是瞎扯淡。
1.下载vlc(点击打开下载),下载自己电脑系统对应的版本并安装;
2.下载vlcj(点击打开下载),把下载文件解压后将其目录下的
jna-3.5.2.jar、platform-3.5.2.jar、vlcj-3.8.0.jar(不同版本后缀数字可能会不同)三个文件复制到对应的java工程目录(新建 lib 文件夹)下;
3.下载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开发简易的视频播放器就已经完成了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。