最终的视频播放器的实现:
主要功能:
(1) 通过查找文件,打开本地视频
(2) 通过代理打开视频(需要服务计算的相关知识)
(3) 暂停,后退,前进
(4) 视频的进度条,点击进度条视频跳转到相应的位置
(5) 调节音量
(6) 其他功能可以自己添加
1. VLCJ
vlcj项目提供了一个Java框架,允许将本机VLC媒体播放器的实例嵌入到Java AWT窗口或Swing JFrame中。VLCJ学习网址:http://capricasoftware.co.uk/#/projects/vlcj/tutorial
VLCJ项目:
https://github.com/caprica/vlcj
2.VLCJ的配置
(1)下载vlc视频播放器,因为要使用里面的库函数。直接百度下载即可。
(2)http://capricasoftware.co.uk/#/projects/vlcj/tutorial/installation去这个地址下载相应的jar包
(3)配置完成后,可以做一个测试
package tutorial;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
public class Tutorial {
public static void main(String[] args) {
boolean found = new NativeDiscovery().discover();
System.out.println(found);
System.out.println(LibVlc.INSTANCE.libvlc_get_version());
}
}
3.配置完成后就可以使用VLCJ写程序了
(1)创建视频播放器的窗口代码,为了代码更加具有可读性,把控件和控件对应的事件分开写。
各种事件的添加可以查看文档:
http://caprica.github.io/vlcj/javadoc/2.2.0/overview-summary.html
最主要的就是
EmbeddedMediaPlayerComponent mediaPlayerComponent;的使用
创建播放器窗口
package 视频播放器;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.List;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
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.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
import uk.co.caprica.vlcj.player.MediaPlayer;
import video.VideoDir;
import video.VideoService;
import video.VideoServiceService;
public class Window extends JFrame {
private final JFrame frame;
private JMenuBar menuBar; // 菜单栏
private JMenu mnFile, mnSetting, mnHelp, service; // 文件菜单
private JMenuItem mnOpenVideo, mnExit;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
//嵌入的媒体播放器组件
private final JButton pauseButton;
private final JButton rewindButton;
private final JButton skipButton;
private final JPanel ProgressPanel;
private final JProgressBar progress;
private final JSlider slider;
private String dir;
private int i;
private int length = 0;
private String[] videoName;
public static void main(final String[] args) {
}
private void getVideoName() {
VideoServiceService vvs = new VideoServiceService();
VideoService vs = vvs.getVideoServicePort();
VideoDir vd = vs.getVideodir();
dir = vd.getDir();
System.out.println(dir);
File fdir = new File(dir);
File f[] = fdir.listFiles();
videoName = new String[f.length];
i = 0;
for (File m : f) {
videoName[i++] = m.getName();
length++;
System.out.println(length);
}
}
public Window() {
frame = new JFrame("视频播放");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
System.exit(0);
}
});
menuBar = new JMenuBar();
setJMenuBar(menuBar);
mnFile = new JMenu("文件"); // 设置菜单名
menuBar.add(mnFile);
mnSetting = new JMenu("设置");
menuBar.add(mnSetting);
mnHelp = new JMenu("帮助");
menuBar.add(mnHelp);
service = new JMenu("服务");
menuBar.add(service);
getVideoName();
for (int i = 0; i < length; i++) {
service.add(videoName[i]);
}
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
mainPlay.openVideo();
}
});
// 退出
mnExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
mainPlay.exit();
}
});
for (i = 0; i < length; i++) {
service.getItem(i).addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
mainPlay.openVideo(dir + "/" + e.getActionCommand());
}
});
}
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
contentPane.add(menuBar, BorderLayout.NORTH);
contentPane.add(mediaPlayerComponent, BorderLayout.CENTER);
progress = new JProgressBar();
ProgressPanel = new JPanel();
ProgressPanel.add(progress);
progress.setStringPainted(true);
JPanel controlsPane = new JPanel();
controlsPane.add(ProgressPanel);
pauseButton = new JButton("暂停");
controlsPane.add(pauseButton);
rewindButton = new JButton("后退");
controlsPane.add(rewindButton);
skipButton = new JButton("前进");
controlsPane.add(skipButton);
slider = new JSlider();
slider.setValue(80);
slider.setMaximum(100);
slider.setVisible(true);
controlsPane.add(slider);
contentPane.add(controlsPane, BorderLayout.SOUTH);
progress.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) { // 点击进度条调整视屏播放进度
int x = e.getX();
mainPlay.jumpTo((float) x / progress.getWidth());
}
});
progress.setStringPainted(true);
pauseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mainPlay.pause();
}
});
rewindButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mainPlay.resume();
}
});
skipButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mainPlay.skip();
}
});
frame.setContentPane(contentPane);
frame.setVisible(true);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
mainPlay.setVol(slider.getValue());
}
});
}
public MediaPlayer getMediaPlayer() {
// TODO Auto-generated method stub
return mediaPlayerComponent.getMediaPlayer();
}
public JProgressBar getProgerss() {
return progress;
}
}
(2)添加相应的事件
package 视频播放器;
import java.awt.EventQueue;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.SwingWorker;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
import video.VideoDir;
import video.VideoService;
import video.VideoServiceService;
public class mainPlay {
static Window frame;
private String dirVideo;
public static void main(String[] args) {
new NativeDiscovery().discover();
// 创建主程序界面运行窗体
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
frame = new Window();
//frame.getMediaPlayer().playMedia("src/环保小视频.mp4"); // 控制播放视屏
new SwingWorker<String, Integer>() {
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.getProgerss().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 openVideo(String dir){
File file=new File(dir);
frame.getMediaPlayer().playMedia(file.getAbsolutePath());
}
//退出播放
public static void exit() {
frame.getMediaPlayer().release();
System.exit(0);
}
// 实现暂停按钮的方法
public static void pause() {
frame.getMediaPlayer().pause();
}
// 实现点击进度条跳转的方法
public static void resume(){
frame.getMediaPlayer().skip(-1000);
}
public static void skip(){
frame.getMediaPlayer().skip(10000);
}
public static void jumpTo(float to) {
frame.getMediaPlayer().setTime((long) (to * frame.getMediaPlayer().getLength()));
}
// 实现控制声音的方法
public static void setVol(int v) {
frame.getMediaPlayer().setVolume(v);
}
}
(3)要想程序正常的运行有两种方法。
方法一:删除服务相关的内容,把服务对应的事件删除即可
方法二:学习服务计算相关知识
推荐选择方法二
播放器的下载的地址:http://download.csdn.net/download/a1342772/10005707