springMVC -Java 基于vlc制作视频播放器

本系统主要使用 SpringMVC+Hibernate+MySQL+VLC技术实现前端视频资源的播放。

播放器可以进行播放,暂停,进度条,选择播放文件,音量调节等。

前端页面主要实现用户的登录,注册,主页界面,电影界面,电视剧界面,动画片界面,播放记录界面,和管理员。

页面可以进行视频的下载,播放,删除(管理员才有权限)。



springMVC框架配置代码:

1.spring-hibernate.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">
    <!-- Spring对com.xrom.ssh目录下的@Repository、@Service、@@Component注解标注的bean进行自动扫描 -->
    <context:component-scan base-package="com.xrom.ssh">
        <!-- 扫描时跳过 @Controller 注解的JAVA类(控制器) -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!--                             hibernate配置                          -->
    <context:property-placeholder location="classpath:/jdbc.properties"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driver}"/>  <!--数据库连接驱动-->
        <property name="jdbcUrl" value="${jdbc.url}"/>     <!--数据库地址-->
        <property name="user" value="${jdbc.username}"/>   <!--用户名-->
        <property name="password" value="${jdbc.password}"/>   <!--密码-->
        <property name="maxPoolSize" value="40"/>      <!--最大连接数-->
        <property name="minPoolSize" value="1"/>       <!--最小连接数-->
        <property name="initialPoolSize" value="10"/>      <!--初始化连接池内的数据库连接-->
        <property name="maxIdleTime" value="20"/>  <!--最大空闲时间-->
    </bean>
    <!--配置session工厂-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.xrom.ssh.entity"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <!--hibernate根据实体自动生成数据库表-->
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>   <!--指定数据库方言-->
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>     <!--在控制台显示执行的数据库操作语句-->
                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>     <!--在控制台显示执行的数据哭操作语句(格式)-->
            </props>
        </property>
    </bean>
    <!-- 事物管理器配置  -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
 
</beans>



2.spring-mvc.xml



<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
    <!-- 启动注解驱动的spring MVC功能,注册请求url和注解POJO类方法的映射-->
    <mvc:annotation-driven/>
    <!--对@controller注解标注的bean进行自动扫描-->
    <context:component-scan base-package="com.xrom.ssh.controller"/>
    <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="views/"/>      <!-- 前缀 -->
        <property name="suffix" value=".jsp"/>   <!-- 后缀 -->
    </bean>
    <!--这里是对静态资源的映射-->
    <mvc:resources mapping="/js/**" location="/resources/js/"/>
    <mvc:resources mapping="/css/**" location="/resources/css/"/>
    <mvc:resources mapping="/img/**" location="/resources/img/"/>
</beans>


3.jdbc.properties

#database connection config
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/playvedio?useUnicode=true&characterEncoding=utf-8
jdbc.username = root
jdbc.password = ******
#hibernate config
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.show_sql = true
hibernate.format_sql = true
hibernate.hbm2ddl.auto = update


4.视频播放主要代码片段:


public void playVedio(final String fileName) {
		if (RuntimeUtil.isMac()) {
			NativeLibrary.addSearchPath(
					RuntimeUtil.getLibVlcLibraryName(), "/Applications/VLC.app/Contents/MacOS/lib"
					);
		}else if (RuntimeUtil.isWindows()) {
			NativeLibrary.addSearchPath(
					RuntimeUtil.getLibVlcLibraryName(), "D:\\playVedio\\VLC"
					);
		}else if (RuntimeUtil.isNix()) {
			NativeLibrary.addSearchPath(
					RuntimeUtil.getLibVlcLibraryName(), "/home/linux/vlc/install/lib"
					);
		}
    	Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
    	
    	EventQueue.invokeLater(new Runnable() {
    		MainPlay frame ;
			public void run() {
				try {
					frame = new MainPlay();
					frame.setVisible(true);
					String options[] = {"--subsdec-encoding=GB18030"};
					VedioMessage vedioMessage =new VedioMessage();
					vedioMessage.setPlayDate(new Date());
					String vedioName=null;
					if(fileName.contains("\\")){
						int lastIndexOf = fileName.lastIndexOf("\\");
						vedioName = fileName.substring( lastIndexOf+1,fileName.length());
					}else if(fileName.contains("/")){
						int lastIndexOf = fileName.lastIndexOf("/");
						vedioName = fileName.substring( lastIndexOf+1,fileName.length());
					}
					
					vedioMessage.setVedioName(vedioName);
					vedioMessage.setPosition(fileName.replace("\\", "/"));
					vedioMessage.setType("电影");
					//personRepository.save(vedioMessage);
					frame.getMediaPlayer().prepareMedia(fileName,options);
					new SwingWorker<String, Integer>() {
						@Override
						protected String doInBackground() throws Exception {
							while (true) {
								long total = frame.getMediaPlayer().getLength();
								long curr = frame.getMediaPlayer().getTime();
								float percent = (float)curr/total;
								publish((int)(percent*100));
								Thread.sleep(100);
							}
						}
						protected void process(java.util.List<Integer> chunks) {
							for (int v : chunks) {
								frame.getProgressBar().setValue(v);
							}
						};
					}.execute();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});	
	}


public class MainPlay  extends JFrame{
 /**
  * created by 893438948@qq.com
  */
 private static final long serialVersionUID = 3929395174555613196L;
 
 private JPanel contentPane;
 
 static EmbeddedMediaPlayerComponent playerComponent;
 
 private JPanel panel;
 
 private JButton btnPlay;
 
 private JButton btnPause;
 
 private JButton btnStop;
 
 private JPanel controlPanel;
 
 private JProgressBar progress;
 
 private JMenuBar menuBar;
 
 private JMenu mnFile;
 
 private JMenuItem mntmOpenVideo;
 
 private JMenuItem mntmOpenSubtitle;
 
 private JMenuItem mntmExit;
 
 private JSlider slider;

 /**
  * Create the frame.
  */
 public MainPlay() {
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setBounds(100, 100, 616, 466);
  
  menuBar = new JMenuBar();
  setJMenuBar(menuBar);
  
  mnFile = new JMenu("File");
  menuBar.add(mnFile);
  
  mntmOpenVideo = new JMenuItem("Open Video...");
  mnFile.add(mntmOpenVideo);
  
  mntmOpenSubtitle = new JMenuItem("Open Subtitle...");
  mnFile.add(mntmOpenSubtitle);
  
  mntmExit = new JMenuItem("Exit");
  mnFile.add(mntmExit);
  
  mntmOpenVideo.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    openVideo();
   }
  });
  
  mntmOpenSubtitle.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    openSubtitle();
   }
  });
  
  mntmExit.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    exit();
   }
  });
  
  
  contentPane = new JPanel();
  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  contentPane.setLayout(new BorderLayout(0, 0));
  setContentPane(contentPane);
  
  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);
  panel.setLayout(new BorderLayout(0, 0));
  
  controlPanel = new JPanel();
  panel.add(controlPanel);
  
  btnStop = new JButton("Stop");
  
  controlPanel.add(btnStop);
  
  btnPlay = new JButton("Play");
  controlPanel.add(btnPlay);
  
  btnPause = new JButton("Pause");
  controlPanel.add(btnPause);
  
  slider = new JSlider();
  slider.setValue(100);
  slider.setMaximum(120);
  slider.addChangeListener(new ChangeListener() {
   public void stateChanged(ChangeEvent e) {
    setVol(slider.getValue());
   }
  });
  controlPanel.add(slider);
  
  progress = new JProgressBar();
  progress.addMouseListener(new MouseAdapter() {
   @Override
   public void mouseClicked(MouseEvent e) {
    int x = e.getX();
    jumpTo((float)x/progress.getWidth());
   }
  });
  progress.setStringPainted(true);
  panel.add(progress, BorderLayout.NORTH);
  btnPause.addMouseListener(new MouseAdapter() {
   @Override
   public void mouseClicked(MouseEvent e) {
    pause();
   }
  });
  btnPlay.addMouseListener(new MouseAdapter() {
   @Override
   public void mouseClicked(MouseEvent arg0) {
    
    play();
   }
  });
  btnStop.addMouseListener(new MouseAdapter() {
   @Override
   public void mouseClicked(MouseEvent e) {
    stop();
   }
  });
 }
 public static EmbeddedMediaPlayer getMediaPlayer() {
  return playerComponent.getMediaPlayer();
 }
 
 public JProgressBar getProgressBar() {
  return progress;
 }
 
 public static void play() {
  
  getMediaPlayer().play();
 }
 public static void pause() {
  getMediaPlayer().pause();
 }
 public static void stop() {
  getMediaPlayer().stop();
 }
 public static void jumpTo(float to) {
  getMediaPlayer().setTime((long)(to*getMediaPlayer().getLength()));
 }
 
 public static void setVol(int v) {
  getMediaPlayer().setVolume(v);
 }
 public static void openVideo() {
  JFileChooser chooser = new JFileChooser();
  int v = chooser.showOpenDialog(null);
  if (v == JFileChooser.APPROVE_OPTION) {
   File file = chooser.getSelectedFile();
   getMediaPlayer().playMedia(file.getAbsolutePath());
  }
 }
 public static void openSubtitle() {
  JFileChooser chooser = new JFileChooser();
  int v = chooser.showOpenDialog(null);
  if (v == JFileChooser.APPROVE_OPTION) {
   File file = chooser.getSelectedFile();
   getMediaPlayer().setSubTitleFile(file);
  }
 }
 
 public static void exit() {
  getMediaPlayer().release();
  System.exit(0);
 }
}

5 vlc环境配置:

5.1、环境配置

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

5.2 . VLC maven dependency in pom. xml:

<dependency>
    <groupId>uk.co.caprica</groupId>
    <artifactId>vlcj</artifactId>
    <version>3.0.1</version>
</dependency>
{code}


6.系统部分截图:








  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值