一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java創(chuàng)建簡易視頻播放器

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

2020-11-09 15:57南柯一夢xihe Java教程

這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建簡易視頻播放器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

最終程序效果圖如下: 

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

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

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

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

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

Java framework for the vlc media player

GitHub 

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

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

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

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

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

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

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

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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)行一下改程序,如果不報錯的話則說明開發(fā)環(huán)境已經(jīng)配置完成。如果報錯的話可以參照上文提到的參考學(xué)習(xí)資源解決問題。

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

具體代碼如下:

主文件類PlayerMain: 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*主程序*/
 
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ù)是視屏文件的絕對路徑
  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);
 }
 
 //實現(xiàn)播放按鈕的方法
 public static void play() {
 frame.getMediaPlayer().play();
 }
 
 //實現(xiàn)暫停按鈕的方法
 public static void pause() {
 frame.getMediaPlayer().pause();
 }
 
 //實現(xiàn)停止按鈕的方法
 public static void stop() {
 frame.getMediaPlayer().stop();
 }
 
 //實現(xiàn)點擊進(jìn)度條跳轉(zhuǎn)的方法
 public static void jumpTo(float to) {
 frame.getMediaPlayer().setTime((long)(to*frame.getMediaPlayer().getLength()));
 }
 
 //實現(xiàn)控制聲音的方法
 public static void setVol(int v) {
 frame.getMediaPlayer().setVolume(v);
 }
 
}

窗體文件類Window: 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*視屏播放器主界面*/
 
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; //控制區(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 南柯一夢");
 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(); //實例化控制區(qū)域容器
 videoPane.add(panel,BorderLayout.SOUTH);
 
 progressPanel=new JPanel(); //實例化進(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){ //點擊進(jìn)度條調(diào)整視屏播放進(jìn)度
 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();
 }
 
 //獲取進(jìn)度條實例
 public JProgressBar getProgressBar() {
 return progress;
 }
 
}

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲 日韩经典 中文字幕 | 挺进白嫩老师下面视频 | 图片亚洲va欧美va国产综合 | 亚洲国产精品久久网午夜 | 精品久久一区 | 波多野结衣xxxx性精品 | 2020年精品国产午夜福利在线 | 青草视频网站在线观看 | 国产精品1| 女性性色生活片免费观看 | 日本在线看免费 | 精品国产成人a区在线观看 精品国产91久久久久久久 | 好吊色网站 | 精品国产乱码久久久久久免费 | 冰漪丰满大乳人体图片欣赏 | 欧美一级艳片视频免费观看 | 日本漫画被黄漫免费动 | 欧美一区二区三区成人看不卡 | 2020韩国三级理论在线观看 | 国产成人盗摄精品 | 精品一区二区91 | 波多野结衣之双方调教在线观看 | 欧美视频在线一区二区三区 | 亚洲视频999 | 欧美福利在线观看 | 亚洲国产影院 | 四虎免费入口 | 午夜在线观看免费完整直播网 | 精品久久久久久久久久香蕉 | 成人永久免费福利视频网站 | 日本免费全黄一级裸片视频 | aaa黄色| 国产a一级 | 成人免费在线视频观看 | 视频在线观看国产 | 99久久精品无码一区二区毛片 | 成人免费视频在 | 午夜特级毛片 | 农夫成人网 | 久久www免费人成高清 | 成人免费福利网站在线看 |