多媒体播放器1

来源:互联网 发布:unity3d 室内漫游实例 编辑:程序博客网 时间:2024/04/30 23:08

 

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

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() {@Overridepublic 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() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubmainPlay.openVideo();}});// 退出mnExit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubmainPlay.exit();}});for (i = 0; i < length; i++) {service.getItem(i).addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubmainPlay.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() {@Overridepublic void actionPerformed(ActionEvent e) {mainPlay.pause();}});rewindButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {mainPlay.resume();}});skipButton.addActionListener(new ActionListener() {@Overridepublic 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 stubreturn 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() {@Overridepublic void run() {// TODO Auto-generated method stubtry {frame = new Window();//frame.getMediaPlayer().playMedia("src/环保小视频.mp4"); // 控制播放视屏new SwingWorker<String, Integer>() {protected String doInBackground() throws Exception {// TODO Auto-generated method stubwhile (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

原创粉丝点击