通过Java利用vlc实现视频播放器 | 您所在的位置:网站首页 › java编写视频播放器 › 通过Java利用vlc实现视频播放器 |
好久没写东西了,最近也开始整理自己曾经学过的东西。在整理的过程中,我将会每周更新一些Java开发的过程中可能会用到的技术,比如,视频播放、office文档处理、二维码的生成和解析等技术。 本期,与大家分享的是利用vlc实现视频播放器的技术。首先大概介绍一下vlc,简单来说,vlc是一个通用的开源的视频播放软件,它的官网是:https://www.videolan.org/vlc/。而我们现在使用的是vlcj,一个在Java里嵌入VLC的解决方案,它的官方文档是https://github.com/caprica/vlcj、http://capricasoftware.co.uk/projects/vlcj-4/tutorials。 下面进入正题,首先我们准备项目需要的jar包和vlc软件,vlc-3.0.6-win64和相关的jar,他们可以通过官方文档进行下载,当然也可以通过此链接下载,当把相关东西下载好之后,废话不多说,直接上代码。 第一个类文件: package my; import java.io.File; import com.sun.jna.NativeLibrary; import uk.co.caprica.vlcj.binding.RuntimeUtil; public class App { public static void creatGUI() { AppFrame frame = new AppFrame(); frame.setVisible(true); } public static void main(String[] args) { File vlcRoot = new File("C:\\Users\\andy\\Desktop\\02 视频播放\\(2) 项目准备\\vlcj\\vlc-3.0.6"); NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName() ,vlcRoot.getAbsolutePath() ); javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub creatGUI(); } }); } } 第二类文件 package my; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.LayoutManager; import java.io.File; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.filechooser.FileNameExtensionFilter; import uk.co.caprica.vlcj.media.MediaRef; import uk.co.caprica.vlcj.media.TrackType; import uk.co.caprica.vlcj.player.base.MediaPlayer; import uk.co.caprica.vlcj.player.base.MediaPlayerEventAdapter; import uk.co.caprica.vlcj.player.base.MediaPlayerEventListener; import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent; public class AppFrame extends JFrame { // VLC控件 private EmbeddedMediaPlayerComponent vlc; // 几个控件 JTextField pathField = new JTextField(); JButton openButton = new JButton("..."); // 进度显示 JSlider slider = new JSlider(); public AppFrame() { super("视频播放测试"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(640, 400); // Content Pane JPanel root = new JPanel(); this.setContentPane(root); root.setLayout(new BorderLayout()); // 创建一个VLC控件 vlc = new EmbeddedMediaPlayerComponent(); root.add(vlc, BorderLayout.CENTER); // 添加按钮控制 JPanel buttons = new JPanel(); root.add(buttons, BorderLayout.PAGE_START); buttons.setLayout(new FlowLayout()); openButton.setFocusPainted(false); buttons.add(pathField); buttons.add(openButton); // 选择视频文件,进行播放 openButton.addActionListener((e) -> { openMedia(); }); //播放进度 Box bottom = Box.createVerticalBox(); bottom.add(slider); slider.setMinimum(0); slider.setMaximum(100); slider.setValue(0); root.add(bottom , BorderLayout.PAGE_END); //初始化vlc initVlcPlayer(); } //初始化vlc private void initVlcPlayer() { //播放视频中的几个事件 vlc.mediaPlayer().events().addMediaPlayerEventListener(new MediaPlayerEventAdapter() { @Override public void error(MediaPlayer mediaPlayer) { // TODO Auto-generated method stub super.error(mediaPlayer); } @Override public void finished(MediaPlayer mediaPlayer) { System.out.println("finished ..."); } @Override public void lengthChanged(MediaPlayer mediaPlayer, long newLength) { // TODO Auto-generated method stub super.lengthChanged(mediaPlayer, newLength); } @Override public void playing(MediaPlayer mediaPlayer) { System.out.println("playing ..."); } @Override public void positionChanged(MediaPlayer mediaPlayer, float newPosition) { System.out.println("positionChanged.. " + newPosition); slider.setValue( (int)(100 * newPosition)); } @Override public void timeChanged(MediaPlayer mediaPlayer, long newTime) { // TODO Auto-generated method stub super.timeChanged(mediaPlayer, newTime); } }); } private void openMedia() { JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("视频", "mp4", "avi", "wmv"); chooser.setFileFilter(filter); int ret = chooser.showOpenDialog(this); if (ret == JFileChooser.APPROVE_OPTION) { // 结果为:已经存在的一个文件 File file = chooser.getSelectedFile(); pathField.setText(file.getAbsolutePath()); // 开始播放视频 vlc.mediaPlayer().media().play(file.getAbsolutePath()); } } } 最后,这个例子是基于swing写的,仅供参考。欢迎大家指出不足。
|
CopyRight 2018-2019 实验室设备网 版权所有 |