最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java創(chuàng)建簡(jiǎn)易視頻播放器

 更新時(shí)間:2017年06月06日 10:26:22   作者:南柯一夢(mèng)xihe  
這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建簡(jiǎn)易視頻播放器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近有個(gè)多媒體的作業(yè),要求使用visualC++和OpenCV編寫一個(gè)簡(jiǎn)易的視頻播放器,對(duì)于C/C++殘疾者而言是不可能的,于是萌生了用Java編寫的想法。具體經(jīng)驗(yàn)分享一下。 

目標(biāo):制作簡(jiǎn)易視頻播放器

開發(fā)工具:eclipse4.5.1;VLC2.2.1

具體內(nèi)容:完成了視頻的加載、播放、退出的功能;實(shí)現(xiàn)了視頻播放過程中控制播放進(jìn)程;實(shí)現(xiàn)播放過程中控制暫停。

最終程序效果圖如下: 

開發(fā)過程參考學(xué)習(xí)資源:

極客學(xué)院視屏教程 

Java framework for the vlc media player

GitHub 

一、環(huán)境配置,也是最重要的一步,如果開發(fā)環(huán)境沒有配置好的話,其他的事都是瞎扯淡。 

1.下載vlc(點(diǎn)擊打開下載vlc鏈接),下載自己電腦系統(tǒng)對(duì)應(yīng)的版本并安裝; 
2.下載vlcj(點(diǎn)擊打開下載vlcj鏈接),把下載文件解壓后將其目錄下的

jna-3.5.2.jar、platform-3.5.2.jar、vlcj-3.8.0.jar(不同版本后綴數(shù)字可能會(huì)不同)三個(gè)文件復(fù)制到對(duì)應(yīng)的java工程目錄(新建 lib 文件夾)下; 

3.下載slf4j(點(diǎn)擊打開slf4j下載),下載文件后解壓將其目錄下的slf4j-api-1.7.13.jar、
slf4j- nop-1.7.13.jar(不同版本后綴數(shù)字可能會(huì)不同)兩個(gè)文件復(fù)制到對(duì)應(yīng)的java工程目錄(新建 lib 文件夾)下; 

4. 將vlc安裝目錄下的libvlc.dll、libvlccore.dll 兩個(gè)文件以及plugins問佳佳復(fù)制到對(duì)應(yīng)的java工程目錄下; 

至此,環(huán)境文件的導(dǎo)入已經(jīng)基本完成。進(jìn)入eclipse將lib文件夾下面的5個(gè) .jar 文件添加到工作路徑。完成后java工程的目錄結(jié)構(gòu)如下: 


java工程下的包里是具體的程序?qū)崿F(xiàn)代碼。 

二.各種環(huán)境文件導(dǎo)入java工程之后還需要配置一下才可能夠配置到最終的工作環(huán)境。 

1.在java工程下新建兩個(gè)包,分別存放程序主文件和窗體文件。在在主程序包下建一個(gè)主類,主類的main函數(shù)作如下配置:

public static void main(String[] args) {

//環(huán)境配置,將vlc sdk導(dǎo)入到eclipse

//if(RuntimeUtil.isWindows()){     }
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), "D:\\Program Files\\VideoLAN\\VLC\\sdk\\lib");

//導(dǎo)入的路徑是vlc的安裝路徑
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);
//System.out.println(LibVlc.INSTANCE.libvlc_get_version());

}

 

b保存后運(yùn)行一下改程序,如果不報(bào)錯(cuò)的話則說明開發(fā)環(huán)境已經(jīng)配置完成。如果報(bào)錯(cuò)的話可以參照上文提到的參考學(xué)習(xí)資源解決問題。

三.接下來就是具體的編碼環(huán)節(jié)了,有問題可以參照java學(xué)習(xí)工具。 

具體代碼如下:

主文件類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) {
 
 //環(huán)境配置,將vlc sdk導(dǎo)入到eclipse
 
 //if(RuntimeUtil.isWindows()){  }
 NativeLibrary.addSearchPath(
 RuntimeUtil.getLibVlcLibraryName(), "D:\\Program Files\\VideoLAN\\VLC\\sdk\\lib"); //導(dǎo)入的路徑是vlc的安裝路徑
 Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);
  //System.out.println(LibVlc.INSTANCE.libvlc_get_version());

 //創(chuàng)建主程序界面運(yùn)行窗體
 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"); //直接播放視屏,參數(shù)是視屏文件的絕對(duì)路徑
  frame.getMediaPlayer().prepareMedia("F:\\Videos\\Let_It_Go.mp4"); //控制播放視屏
  new SwingWorker<String, Integer>() {

  @Override
  protected String doInBackground() throws Exception {
  // TODO Auto-generated method stub
  while (true) { //獲取視頻播放進(jìn)度并且按百分比顯示
  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.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);
 }

 //實(shí)現(xiàn)播放按鈕的方法
 public static void play() {
 frame.getMediaPlayer().play();
 }
 
 //實(shí)現(xiàn)暫停按鈕的方法
 public static void pause() {
 frame.getMediaPlayer().pause();
 }
 
 //實(shí)現(xiàn)停止按鈕的方法
 public static void stop() {
 frame.getMediaPlayer().stop();
 }
 
 //實(shí)現(xiàn)點(diǎn)擊進(jìn)度條跳轉(zhuǎn)的方法
 public static void jumpTo(float to) {
 frame.getMediaPlayer().setTime((long)(to*frame.getMediaPlayer().getLength()));
 }
 
 //實(shí)現(xiàn)控制聲音的方法
 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; //頂層容器,整個(gè)播放頁面的容器
 private JMenuBar menuBar; //菜單欄
 private JMenu mnFile,mnSetting,mnHelp; //文件菜單
 private JMenuItem mnOpenVideo,mnExit; //文件菜單子目錄,打開視屏、退出
 private JPanel panel; //控制區(qū)域容器
 private JProgressBar progress; //進(jìn)度條
 private JPanel progressPanel; //進(jìn)度條容器
 private JPanel controlPanel; //控制按鈕容器
 private JButton btnStop,btnPlay,btnPause; //控制按鈕,停止、播放、暫停
 private JSlider slider; //聲音控制塊
 
 
 EmbeddedMediaPlayerComponent playerComponent; //媒體播放器組件
 
 public static void main(String[] args) {
 
 }

 //MainWindow構(gòu)造方法,創(chuàng)建視屏播放的主界面
 public Window(){
 setTitle(" VideoPlayer Copyright@2015 by 南柯一夢(mèng)");
 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("文件"); //設(shè)置菜單名
 menuBar.add(mnFile);
 mnSetting=new JMenu("設(shè)置");
 menuBar.add(mnSetting);
 mnHelp=new JMenu("幫助");
 menuBar.add(mnHelp);
 
 mnOpenVideo =new JMenuItem("打開文件"); //設(shè)置文件菜單子目錄打開文件
 mnFile.add(mnOpenVideo);
 
 mnExit =new JMenuItem("退出"); //設(shè)置文件菜單子目錄退出
 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(); //實(shí)例化控制區(qū)域容器
 videoPane.add(panel,BorderLayout.SOUTH);
 
 progressPanel=new JPanel(); //實(shí)例化進(jìn)度條容器
 panel.add(progressPanel, BorderLayout.NORTH);

 //添加進(jìn)度條
 progress=new JProgressBar(); 
 progressPanel.add(progress);
 //panel.add(progress,BorderLayout.NORTH);
 progress.addMouseListener(new MouseAdapter() {
 @Override
 public void mouseClicked(MouseEvent e){ //點(diǎn)擊進(jìn)度條調(diào)整視屏播放進(jìn)度
 int x=e.getX();
 PlayerMain.jumpTo((float)x/progress.getWidth());
 }
 });
 progress.setStringPainted(true);
 
 
 controlPanel=new JPanel(); //實(shí)例化控制按鈕容器
 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);
 }
 
 //獲取播放媒體實(shí)例(某個(gè)視頻)
 public EmbeddedMediaPlayer getMediaPlayer() {
 return playerComponent.getMediaPlayer();
 }
 
 //獲取進(jìn)度條實(shí)例
 public JProgressBar getProgressBar() {
 return progress;
 }
 
}

至此使用java開發(fā)簡(jiǎn)易的視頻播放器就已經(jīng)完成了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot詳細(xì)列舉常用注解的說明

    SpringBoot詳細(xì)列舉常用注解的說明

    在開發(fā)SpringBoot程序的過程中,有可能與其他業(yè)務(wù)系統(tǒng)進(jìn)行對(duì)接開發(fā),獲取封裝公共的API接口等等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot常見的注解的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • java中queue接口的使用詳解

    java中queue接口的使用詳解

    本篇文章主要介紹了java中queue接口的使用詳解,對(duì)學(xué)習(xí)Queue接口有一定的幫助,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • shiro 認(rèn)證流程操作

    shiro 認(rèn)證流程操作

    這篇文章主要介紹了shiro 認(rèn)證操作的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Struts2之Validator驗(yàn)證框架的詳細(xì)介紹

    Struts2之Validator驗(yàn)證框架的詳細(xì)介紹

    Struts2中提供了數(shù)據(jù)校驗(yàn)驗(yàn)證數(shù)據(jù)例如驗(yàn)證郵件、數(shù)字等,本篇文章介紹了Struts2之Validator的詳細(xì)介紹,有興趣的可以了解一下。
    2017-03-03
  • JAVA使用POI(XSSFWORKBOOK)讀取EXCEL文件過程解析

    JAVA使用POI(XSSFWORKBOOK)讀取EXCEL文件過程解析

    這篇文章主要介紹了JAVA使用POI(XSSFWORKBOOK)讀取EXCEL文件過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • JAVA操作XML實(shí)例分析

    JAVA操作XML實(shí)例分析

    這篇文章主要介紹了JAVA操作XML的方法,實(shí)例分析了java操作XML文件的常用技巧,需要的朋友可以參考下
    2015-03-03
  • Java實(shí)現(xiàn)租車管理系統(tǒng)

    Java實(shí)現(xiàn)租車管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)租車管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • java9學(xué)習(xí)系列之安裝與jshell使用

    java9學(xué)習(xí)系列之安裝與jshell使用

    2017年9月21日,千呼萬喚始出來,Java9終于發(fā)布了。作為自己天天接觸的“對(duì)象”,還是應(yīng)該多花點(diǎn)心思去了解她。后續(xù)再進(jìn)一步了解詳細(xì)特性。下面這篇文章主要給大家介紹了關(guān)于java9學(xué)習(xí)系列之安裝與jshell使用的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • java實(shí)現(xiàn)小球碰撞功能

    java實(shí)現(xiàn)小球碰撞功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)小球碰撞功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Java創(chuàng)建數(shù)組、賦值的四種方式詳解(聲明+創(chuàng)建+初始化?)

    Java創(chuàng)建數(shù)組、賦值的四種方式詳解(聲明+創(chuàng)建+初始化?)

    數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用來存儲(chǔ)同一類型值的集合一旦創(chuàng)建了數(shù)組,就不能再改變它的長(zhǎng)度,下面這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建數(shù)組、賦值的四種方式(聲明+創(chuàng)建+初始化?)的相關(guān)資料,需要的朋友可以參考下
    2024-04-04

最新評(píng)論

华宁县| 贺兰县| 醴陵市| 甘孜县| 安岳县| 辉县市| 长顺县| 通化市| 济南市| 元谋县| 阿拉善右旗| 濉溪县| 合江县| 丹棱县| 建水县| 峨边| 正蓝旗| 瑞昌市| 永定县| 泽普县| 河北省| 那曲县| 张家界市| 益阳市| 高安市| 来安县| 焦作市| 河北省| 宁远县| 乌兰察布市| 沿河| 湘乡市| 民乐县| 资兴市| 陇西县| 昌吉市| 珲春市| 高雄市| 黑龙江省| 分宜县| 南漳县|