最近有个多媒体的作业,要求使用visualC++和opencv编写一个简易的视屏播放器,对于C/C++残疾者而言是不可能的,于是萌生了用java编写的想法。具体经验分享一下。

目标:制作简易视屏播放器

开发工具:eclipse4.5.1;VLC2.2.1

具体内容:完成了视屏的加载、播放、退出的功能;实现了视屏播放过程中控制播放进程;实现播放过程中控制暂停。

最终程序效果图如下:

开发过程参考学习资源:极客学院视屏教程http://www.jikexueyuan.com/course/248_1.html?ss=1;

Java framework for the vlc media playerhttp://capricasoftware.co.uk/#/projects/vlcj

GitHub

一、环境配置,也是最重要的一步,如果开发环境没有配置好的话,其他的事都是瞎扯淡。

1.下载vlc(点击打开下载vlc链接:http://www.videolan.org/),下载自己电脑系统对应的版本并安装;

2.下载vlcj(点击打开下载vlcj链接http://capricasoftware.co.uk/#/projects/vlcj),把下载文件解压后将其目录下的

jna-3.5.2.jar、platform-3.5.2.jar、vlcj-3.8.0.jar(不同版本后缀数字可能会不同)三个文件复制到对应的java工程目录(新建 lib 文件夹)下;

3.下载slf4j(点击打开slf4j下载链接http://www.slf4j.org/),下载文件后解压将其目录下的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() {

@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 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开发简易的视屏播放器就已经完成了。

2015年12月28日     By 南柯一梦

java 生成media_使用java创建一个简易的视屏播放器相关推荐

  1. 使用java创建一个简易的视屏播放器

    最近有个多媒体的作业,要求使用visualC++和opencv编写一个简易的视屏播放器,对于C/C++残疾者而言是不可能的,于是萌生了用java编写的想法.具体经验分享一下. 目标:制作简易视屏播放器 ...

  2. 用python写的一个简易的云音乐播放器

    本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了github上他人写的一个汉字转拼音的库,大家可以在github上找到. #co ...

  3. 创建一个全功能的FLV播放器

    我们将制作的这个FLV播放器由这样几部分组成: 一个用于显示视频图像的视频对象, 三个分别用于播放.暂停和停止视频的按钮, 以及一个用于显示缓冲区装载进度的动态文本. 1. 创建三个按钮元件,分别命名 ...

  4. web音频播放器_Web设计:如何创建一个时尚的Web音频播放器

    我仍然记得在2000年代初,在线播放富媒体(音频和视频)时遇到了很多限制. 很容易就将开始视为理所当然,尤其是自从今天以来,我们有很多商店可以播放音频,例如last.fm或播放视频,例如Youtube ...

  5. 使用AVPlaer创建视屏播放器

    //#PlayerView.m文件中 #import "PlayerView.h" #import <AVFoundation/AVFoundation.h> #imp ...

  6. 关于一个简易的Html5音乐播放器的制作

    源代码存放在github上:https://github.com/WYKXLDZ/CollegeJoy/tree/master/SimpleMusicPlayer 效果: <!Doctype h ...

  7. 如何使用 Java AWT 创建一个简易计算器

    本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工具包)是一个有助于构建 GUI 的 API (图形用户界面)基 ...

  8. java全景图片生成_[Java教程]使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果...

    [Java教程]使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果 0 2015-07-23 18:00:14 360度的全景图片效果常常可以用到给客户做产品展示,今天这里我们 ...

  9. Java数据结构——用单链表编写一个简易通讯录

    Java数据结构--用单链表编写一个简易通讯录 1.定义线性表的抽象数据类型(接口) 2.定义单链表的结点Node类 3.定义数据域中的联系人Person类 4.编写顺序表(类) 5.编写测试程序(m ...

最新文章

  1. NOIP2013普及组 T2 表达式求值
  2. CSS3新的鼠标样式介绍
  3. 聊下 git 使用前的一些注意事项
  4. Python 输出的空格问题
  5. nodejs项目的package-lock.json文件的用途
  6. YbtOJ#526-折纸游戏【二分,hash】
  7. Prototype1.5.1源代码解读分析-3
  8. MySQL的常用SQL脚本
  9. php语言输出九九乘法表_PHP 输出九九乘法表
  10. sublime快速打开终端terminal
  11. java kv对象_java入门之——对象转型
  12. 第三方登录、支付接口本地代码调试方法
  13. linux内核IO模块plug/unplug机制
  14. 解决position:fixed抖动的问题
  15. 谷歌浏览器弹出Chrome版本太旧解决方式
  16. 有监督学习、无监督学习、半监督学习和强化学习的总结
  17. 直接管理和维护计算机系统的程序称为,全国2008年4月自考计算机原理试题
  18. 寄人东篱下,愤然见南山
  19. 在OpenJweb平台中实现微信刷卡支付(被动扫码)
  20. EOS区块链浏览器(查询账户工具)

热门文章

  1. C++ 中 对dll二次封装时,加载第三方库dll时 LoadLibrary 时错误代码126
  2. 帮我写一个500字的本科论文致谢
  3. 被裁员,HR说要背调阴我!网友说,主动裁员还敢整人?录音留证,必须诉讼!...
  4. HTML5 canvas大风车动画转啊转
  5. 绿色环保作为经济长线主题,MOVE PROTOCOL运动APP来助力
  6. 计算机信息提取实验报告,水体提取实验报告.doc
  7. poj1381(复数除法+dfs)
  8. 汇编实例5——大小写的转换
  9. LCD显示屏 - lvds点屏问题
  10. 【计算机网络 1.网络报文的传递 MAC与IP地址的用处】