java创建简易视频播放器

最近有个多媒体的作业,要求使用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开发简易的视频播放器就已经完成了。

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

(0)

相关推荐

  • java音乐播放器实现代码

    本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下 这个是源码结构介绍 这个是界面,有点简陋,见笑了,但是基本上的东西都有了,没办法,没有美工的程序写的界面 直接上源代码Player.java package com.service; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Random; import javax.sound

  • 使用JMF实现java视频播放器

    JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将代码贴上去 package com.bird.jmf; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Frame; import java.awt

  • 简单实现java音乐播放器

    学习过java语言的你,或多或少,在某天突发奇想,想着用swing做一个音乐播放器.但是,发现很难找到,相关的java代码,或者你下载的代码有问题,或者你代码里面引入的类包找不到.为了解决自如此类的问题.在这儿,有如下的代码可以供大家参考. package TheMusic; import java.io.*; import javax.sound.sampled.*; public class Music { public static void main(String[] args) { /

  • Java swing仿酷狗音乐播放器

    今天给大家介绍下用Java swing开发一款音乐播放器,高仿酷狗音乐播放器,完整源码地址在最下方,本文只列出部分源码,因为源码很多,全部贴不下,下面还是老规矩.来看看运行结果: 下面我们来看看代码: 首先看一下主窗口的实现代码: package com.baiting; import java.awt.Dimension; import java.awt.Toolkit; import com.baiting.menu.CloseWindow; /** * 窗口 * @author lmq *

  • 教你轻松制作java视频播放器

    前言 跳过废话,直接看正文 当年入坑Java是因为它的跨平台优势.那时我认为,"编写一次,处处运行."这听上去多么牛逼,应该是所有语言发展的终极之道,java势必会一统天下. 然而事实证明,那时的我还是太年轻. 正所谓鱼和熊掌不可兼得,若要享受跨平台带来的方便,便不可避免地要接受性能上的不足.事实上,java一直在致力于提高虚拟机的性能(JIT等技术),但面对对实时计算性能要求很高或涉及到用硬件优化的任务(视频的硬件编码.解码)时,仍远远比不上c或c++.因此,很少能够看到有人用jav

  • 一个简单的Java音乐播放器

    本文实例为大家分享了Java音乐播放器展示的具体代码,供大家参考,具体内容如下 package KKMusic; import java.applet.Applet; import java.applet.AudioClip; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.borde

  • java音乐播放器编写源码

    本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下 源码: package baidu; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.media.bean.playerbean.*; //这个包要用到JMF public class MP3 extends JFrame impleme

  • 利用java制作简单的音乐播放器

    本文主要是用到java中的swing技术,以及JMFjar中的API,为大家分享了java音乐播放器的具体实现代码,供大家参考,具体内容如下 备注:需要用JDK1.8才能播放音乐MP3 package baidu; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.media.bean.playerbean.*;

  • 教你轻松制作java音乐播放器

    一.音乐播放器的实现原理 Javase的多媒体功能很弱,所以有一个专门处理多媒体的插件叫JMF,JMF提供的模型可大致分为七类 * 数据源(Data source) * 截取设备(Capture Device,包括视频和音频截取设备) * 播放器(Player) * 处理器(Processor) * 数据池(DataSink) * 数据格式(Format) * 管理器(Manager) 而我所做的这个音乐播放器MyMusicPlayer(这是我创建的类名)正是调用了JMF中的Player类来实现

  • java音乐播放器课程设计

    一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中对多媒体编程的应用. 二.课程设计的要求 利用学到的编程知识和编程技巧,要求学生: 1.系统设计要能完成题目所要求的功能,设计的软件可以进行简单的播放及其他基本功能. 2.编程简练,可用,尽可能的使系统的功能更加完善和全面 3.说明书.流程图要清楚. 三.课程设计内容 1.课程设计的题目及简介 音乐播放软件要求: 有图形界面,能播放MP3歌曲,有播放列表,前一首.

随机推荐