java课程设计视频播放器_在Java实现视频播放器(vlc)
學習Java幾個月,剛剛入門。昨天看到極客學院的Java的入門視頻最后有一個簡易播放器的制作,因為最近學校要做一個項目,正好需要加入一個視頻播放器,就按照視頻的方法來做,但是在做時發現N多問題,都是在Windows下特殊的問題,希望可以幫助到需要的人。
這里給出極客學院的視頻鏈接。
大家會在Windows下遇到的問題居多,因為極客學院的視頻里用的機器是MAC所以在環境搭建的時候會和Windows有很多不一樣的地方,所以我把我在實現過程中遇到的問題都總結一下。
此文章適合初學者學習,如有哪里不足請大家指出來。
搭建環境
環境搭建也是最重要的一步,如果環境都沒有還談何開發。
1.首先需要下載vlc播放器,可以在官網下載或者直接百度搜索下載。
請注意64位Windows系統一定要下載64位vlc播放器,否則就找不到否則在建立主程序時就會報如下的錯誤。
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libvlc': JNA native support (win32-amd64/libvlc.dll) not found in resource path (F:\我的文檔\JAVATEMP\MyVideoPlayer\bin;F:\我的文檔\JAVATEMP\MyVideoPlayer\lib\jna-3.5.2.jar;F:\我的文檔\JAVATEMP\MyVideoPlayer\lib\platform-3.5.2.jar;F:\我的文檔\JAVATEMP\MyVideoPlayer\lib\vlcj-3.0.1.jar)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)
at com.sun.jna.Library$Handler.(Library.java:142)
at com.sun.jna.Native.loadLibrary(Native.java:387)
at com.sun.jna.Native.loadLibrary(Native.java:366)
at VideoPlayer.main.PlayerMain.main(PlayerMain.java:25)
此錯誤就說明你下載的vlc播放器不是對應你系統的位數。
在官網下載的話好像都是32位的所以這個坎讓我過的非常頭疼。我在網上找到了vlc64位版,在此貼出下載地址。
2.下載完vlc播放器之后還需下載vlcj用里面的jar包來驅動vlc,這里給出vlcj的官網和下載地址。
如果上述下載地址失效,請進入官網
然后往下拉
紅線標注的地方下載。
之后再下載slf4j,下載鏈接。
3.工具都準備好之后就開始著手搭建環境。
首先在你準備的工程下導入vlcj中的jna-4.1.0.jar,jna-platform-4.1.0.jar,vlcj-3.10.1.jar 和slf4j中的。如圖:
如果不會導入jar包的話請看極客學院教學入門視頻,索引為5.1.3外部庫的導入與使用。
在你下載的vlc包的目錄中找到libvlc.dll和libvlccore.dll這兩個文件和plugins文件夾,把他們復制到你的Java項目中。
建立完整后的Java項目結構應該為
其中多出一個包,我也不知道是什么時候進去的,不用在意。
在開始前需要先開始寫出主函數驅動起來vlc播放器。其代碼如下:
public class PlayerMain {
public static void main(String[] args) {
NativeLibrary.addSearchPath(
//此處的路徑是你安裝vlc的路徑加上sdk和lib下面會給出詳細解釋
RuntimeUtil.getLibVlcLibraryName(), "d:\\VLC\\sdk\\lib");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);
}
}
我在輸入路徑的時候只輸入到我的安裝目錄,比如我安裝到D盤下的VLC文件夾下,如果在上述代碼中寫在"D:\\VLC"就會報錯。一定要在你安裝的主目錄后面加上"\\sdk\\lib",比如我在添加之后就變為"D:\\VLC\\sdk\\lib",這和MAC系統是不同的請注意。
把主函數下的代碼復制進去后會在幾個句子下飄紅線,說明你還沒有導包,把鼠標放到紅線下選擇第一個解決方法就自動導包了,在導包完成和改好目錄后就可以嘗試運行 了。雖然不會發生任何的事,但是只要不報錯就說明你的環境配置成功了,接下來就可以著手開發自己的播放器程序了。
開發代碼
給出我做好的簡易播放器的截圖,大家可以根據自己的需要自己設計。
下面貼出我的代碼,僅供參考:
import java.awt.EventQueue;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.SwingWorker;
import com.LaoZhao.VideoPlayer.view.MyWindow;
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 MyWindow frame;
public static void main(String[] args) {
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), "d:\\VLC\\sdk\\lib");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new MyWindow();
frame.setVisible(true);
frame.getMediaPlayer().prepareMedia("d:\\HTML5播放器對比Flash插件.mp4");
new SwingWorker() {
@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 chunks) {
for (int v:chunks) {
frame.getProgressBar().setValue(v);
}
};
}.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//播放按鈕
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);
}
//打開文件
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);
}
}
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import com.LaoZhao.VideoPlayer.main.PlayerMain;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JProgressBar;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JSlider;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
public class MyWindow extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
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 menu;
private JMenuItem openmenu;
private JMenuItem closemenu;
private JSlider slider;
/**
* Launch the application.
*/
public static void main(String[] args) {
}
/**
* Create the frame.
*/
public MyWindow() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 640, 480);
menuBar = new JMenuBar();
setJMenuBar(menuBar);
menu = new JMenu("\u6587\u4EF6");
menuBar.add(menu);
openmenu = new JMenuItem("\u6253\u5F00");
menu.add(openmenu);
closemenu = new JMenuItem("\u9000\u51FA");
menu.add(closemenu);
openmenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PlayerMain.openVideo();
}
});
closemenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PlayerMain.exit();
}
});
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel Videopanel = new JPanel();
contentPane.add(Videopanel, BorderLayout.CENTER);
Videopanel.setLayout(new BorderLayout(0, 0));
playerComponent = new EmbeddedMediaPlayerComponent();
Videopanel.add(playerComponent);
panel = new JPanel();
Videopanel.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) {
PlayerMain.setvol(slider.getValue());
}
});
controlpanel.add(slider);
progress = new JProgressBar();
progress.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x=e.getX();
PlayerMain.jumpTo(((float)x/progress.getWidth()));
}
});
progress.setStringPainted(true);
panel.add(progress, BorderLayout.NORTH);
btnPause.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
PlayerMain.pause();
}
});
btnPlay.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
PlayerMain.play();
}
});
btnStop.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
PlayerMain.stop();
}
});
}
public EmbeddedMediaPlayer? getMediaPlayer() {
return playerComponent.getMediaPlayer();
}
public JProgressBar getProgressBar(){
return progress;
}
}
第一次撰寫技術性文章,歡迎指出我的錯誤。
總結
以上是生活随笔為你收集整理的java课程设计视频播放器_在Java实现视频播放器(vlc)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦回长安
- 下一篇: 热经-北京中地时空数码科技有限公司-研发