Java利用VLC开发简易视屏播放器功能

1、环境配置

(1)下载VLC VlC官网http://www.videolan.org/ 各个版本的下载地址http://download.videolan.org/pub/videolan/vlc/last/ 里面有32位和64位的区分,按照自己的系统下载对应的vlc版本,下载解压后提取;

(2)下载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(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工程目录下;

将lib文件中的jar包导入到工程项目中。配置好的项目目录如下图所示

(5)具体代码如下

播放器主类代码

package deng.test;

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 uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;

public class PlayerMain {

    static Window frame;
    private static int times=1;
    private static boolean flag=true;
    // 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:\\vlc\\vlc-2.2.6\\sdk\\lib"); //导入的路径是vlc的安装路径
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "vlcj//lib"); // 导入的路径是vlc的安装路径
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
        // System.out.println(LibVlc.INSTANCE.libvlc_get_version());

        // 创建主程序界面运行窗体
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                    try {
                        frame = new Window();
                        frame.setVisible(true);
                        frame.getMediaPlayer().playMedia("video//style.avi"); // 直接播放视屏,参数是视屏文件的绝对路径
                        // frame.getMediaPlayer().prepareMedia("video//test.mp4");
                        // //控制即将播放的视频
                        new SwingWorker<String, Integer>() {

                            @Override
                            protected String doInBackground() throws Exception {
                                // TODO Auto-generated method stub
                                while (flag) { // 获取视频播放进度并且按百分比显示
                                    long total = frame.getMediaPlayer().getLength();
                                    if(total==-1){//如果视频播放完,循环播放视频
                                        play();
                                        times++;
                                        System.out.println(times+"******************");
                                    }
                                    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 dispose(){
        flag=false;
        frame.getMediaPlayer().stop();
        frame.dispose();
    }

    // 打开文件
    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);
    }

}

播放器窗体类:

package deng.test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

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 uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;  

@SuppressWarnings("serial")
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("   小婷婷专属播放器   Copyright@dengchaoqun");
        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.dispose();
                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;
    }  

}

效果如下:

(6)在视频播放面板上操作视频接口方法:

playerComponent = new EmbeddedMediaPlayerComponent();
        panel.add(playerComponent);
        //视频表面的鼠标事件监听
        playerComponent.getVideoSurface().addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mousePressed(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub
                System.out.println("**************");
            }
        });

(7)项目总结:应用了开源vlc,运用了jna技术,实现了多媒体视频播放。

到此这篇关于Java利用VLC开发简易视屏播放器的文章就介绍到这了,更多相关Java视屏播放器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用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创建简易视频播放器

    最近有个多媒体的作业,要求使用visualC++和OpenCV编写一个简易的视频播放器,对于C/C++残疾者而言是不可能的,于是萌生了用Java编写的想法.具体经验分享一下. 目标:制作简易视频播放器 开发工具:eclipse4.5.1:VLC2.2.1 具体内容:完成了视频的加载.播放.退出的功能:实现了视频播放过程中控制播放进程:实现播放过程中控制暂停. 最终程序效果图如下: 开发过程参考学习资源: 极客学院视屏教程 Java framework for the vlc media play

  • java 实现音乐播放器的简单实例

    java 实现音乐播放器的简单实例 实现效果图: 代码如下 package cn.hncu.games; import java.applet.Applet; import java.applet.AudioClip; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.Mou

  • 简单实现java音乐播放器

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

  • 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音乐播放器课程设计

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

  • 一个简单的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利用VLC开发简易视屏播放器功能

    1.环境配置 (1)下载VLC VlC官网http://www.videolan.org/ 各个版本的下载地址http://download.videolan.org/pub/videolan/vlc/last/ 里面有32位和64位的区分,按照自己的系统下载对应的vlc版本,下载解压后提取: (2)下载VLCJ (http://capricasoftware.co.uk/#/projects/vlcj)把下载文件解压后将其目录下的jna-3.5.2.jar.platform-3.5.2.jar

  • 如何利用Python实现简易的音频播放器

    目录 1.需要用到的Python库 2.简易UI设计 3.功能模块实现 3.1选择音频文件进行播放 3.2控制音频播放.暂停 3.3控制音频音量大小 3.4播放器初始化等细节 4.运行 5.简易音频播放器展示图 6.总结 1. 需要用到的Python库 pygame tkinter 2. 简易UI设计 audio_player = Tk() audio_player.title('Audio Player v1.0') audio_player.geometry('100x100+570+200

  • Java利用读写的方式实现音频播放代码实例

    这篇文章主要介绍了Java利用读写的方式实现音频播放代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 public static void main(String[] args) { Audiotest at = new Audiotest("我在测试时,这里必须是盘符的音频文件"); at.start(); } import java.io.File; import java.io.IOException; import ja

  • java利用递归算法实现对文件夹的删除功能

    前提: 集成开发环境(IDE):eclipse jdk版本:8.0 File类的几个方法: 1)isFile() 测试此抽象路径名表示的文件是否为普通文件. 2)list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录. 3)delete() 删除由此抽象路径名表示的文件或目录. 4)listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件. File类的一个属性: separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串

  • Java实现的简单音乐播放器功能示例

    本文实例讲述了Java实现的简单音乐播放器功能.分享给大家供大家参考,具体如下: 应用名称:Java简单的音乐播放器 用到的知识:Java GUI编程,线程,IO 开发环境:win8+eclipse+jdk1.8 功能说明:可以选择内置的音乐文件播放,循环播放,停止.PS:这个播放器只能播放.au .aiff .wav .midi .rfm格式的音频. 效果图: 源代码: import java.applet.AudioClip; import java.awt.*; import java.n

  • Android实现简易的音乐播放器

    本文实例为大家分享了Android实现简易的音乐播放器,供大家参考,具体内容如下 功能介绍 本次实验实现的是使用Andriod Studio开发一个简易的音乐播放器,所包含的功能有音乐的播放.暂停.上一曲.下一曲.音乐播放的进度以及手动拖动来控制音乐的播放进度. 实现过程 导入项目所需的音乐文件.图标.背景等 1.创建一个raw文件夹,将音乐文件导入到这个文件夹中,方便我们在项目中使用 2.在drawable中导入所需的图片.图标 设计UI界面 1.设计5个button控件,分别对应上一曲,下一

  • Java Socket+mysql实现简易文件上传器的代码

    最近跟着某网站学习了一个小项目,因为白天有课,所以都是晚上写的,今天把它完成了. 项目主要是实现一个文件上传器,通过客户端的登陆,把本地文件上传到服务器的数据库(本地的). 首先建两个表如下: 一个文件信息表 CREATE TABLE `fileinfo` ( `Fname` char(50) NOT NULL, `FInfo` blob NOT NULL, `FId` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`FId`) ) ENGINE=I

  • Android开发实现的简单媒体播放器功能示例

    本文实例讲述了Android开发实现的简单媒体播放器功能.分享给大家供大家参考,具体如下: 一.概述: 因为播放视频需要很大的内存,所以必须使用surfaceview , surfaceview 里实现了双缓冲的功能, 二.全部代码: /** * @描述 使用surfaceview 创建视频 * @项目名称 App_Basic * @包名 com.example.basic.media * @类名 MediaPlayerActivity * @author chenlin * @date 201

  • Python趣味挑战之实现简易版音乐播放器

    一.前言 今天我们将用Python来创建一个属于自己的音乐播放器.为此,我们将使用三个软件包: Tkinter:用于UI Pygame:播放音乐 os:用于访问系统文件 在这里我们将看到创建音乐播放器的每个步骤,我们将代码分为四个部分. 二.实现过程 在第一部分中,我们将导入所有软件包.其次,我们将创建UI.第三,我们从系统中导入所有音乐并在APP应用程序中进行展示.第四,设计一个有助于播放特定音乐的功能. 在导入所有这三个软件包之前,我们必须在系统中安装这些软件包. pip install p

  • Python编程实现简易的音乐播放器基本操作

    目录 安装 我们要做什么(逻辑) 启动播放器 加载歌曲 设置音量 开始播放歌曲 暂停歌曲 继续播放歌曲 设置音量(播放时再次使用) 停止歌曲 Code Music player in python 大家好,今天我们要看看如何用 Python制作音乐播放器.此音乐播放器播放您的歌曲,您可以在播放歌曲时暂停.恢复.设置音量,然后您可以停止音乐. 安装 pip install pygame 在 python 中,游戏编程是在pygame其中完成的,它是这样做的最佳模块之一. 为了在 中播放音乐/音频文

随机推荐