多媒体播放器1

 

最终的视频播放器的实现:

clip_image002

主要功能:

(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包

clip_image004

(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)创建视频播放器的窗口代码,为了代码更加具有可读性,把控件和控件对应的事件分开写。

clip_image006

各种事件的添加可以查看文档:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值