
我最近正在研究ffmpeg,并编写了一个程序来调用ffmpeg来记录屏幕. 我想在录制完屏幕后让播放器播放. 当然,您可以使用第三方播放器,例如ffmpeg中的ffplay播放器java本地视频播放器,但是ffplayer似乎不符合我的期望. 毕竟java本地视频播放器,我想编写自己的程序,简单地调用第三方软件有点低. 因此出现了编写自己的视频播放器并将其嵌入到自己的程序中的想法. 在这里,我选择了vlc进行开发,因此我需要下载vlc和一些必要的jar包.
效果如下

1. 首先,您需要下载vlc的安装包. 从vlc下载URL中选择相应的系统版本. 64位系统需要下载64位. 官方网站默认情况下下载32位,因此您需要找到64位并自己下载. . 下载完成后,安装它. 安装完成后,找到您自己的安装目录,将插件目录libvlc.dll和libvlccore.dll复制到安装目录下,并将其粘贴到您自己的项目目录中(建议建立一个lib目录以便于管理)

2. 下载vlcj
(点击下载)
下载后解压缩,然后从解压缩的目录中将以下四个jar包复制到项目目录(lib)目录中. 因为我在这里选择的vlcj版本为4.4.0,因此与3.0版本的配置有所不同(4.0不需要导入slf4j jar包,因此在官方网站上可以看到一些3.0版本的配置会更加方便,官方网站上也有相应的配置和案例教程)


完成上述两个步骤后,您需要将jar包导入到项目中
如何通过eclipse导入jar包: 右键单击导入的jar包,然后选择buildpath-> add
导入jar包一个接一个,C dll库文件也以相同的方式导入.
想法导入: 单击文件->项目结构->库单击➕查找jar包,然后一个一个地导入.

完成上述步骤后,距离成功并不远. 如果上述步骤未完成,则无法启动以下代码实现过程. 为了验证上述步骤是否正确完成,请在新创建的类中编写以下代码进行测试:
package tutorial;
import uk.co.caprica.vlcj.factory.MediaPlayerFactory;
public class Tutorial {
public static void main(String[] args) {
MediaPlayerFactory factory = new MediaPlayerFactory();
}
}
如果以上代码未报告错误,则说明环境配置已完成,然后开始编写视频播放器. 我自己使用idea来实现它,并且我喜欢idea(可能是因为它具有强大的提示功能)
编写代码并不难,您可以快速创建自己的视频播放器.

该代码使用JPanel放置视频组件(EmbeddedMediaPlayerComponent)和控制按钮组件. 它主要调用视频组件的API并注册和侦听事件.
代码如下
import uk.co.caprica.vlcj.player.base.Marquee;
import uk.co.caprica.vlcj.player.base.MarqueePosition;
import uk.co.caprica.vlcj.player.base.MediaPlayer;
import uk.co.caprica.vlcj.player.base.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;
import javax.management.JMRuntimeException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
重要事情说三遍:导对包,导对包,导对包
*程序主要用到的一些类 EmbeddedMediaPlayerComponent
*主要的一些方法
* mediaPlayerComponent.mediaPlayer().media().play();
* mediaPlayerComponent.mediaPlayer().media().skip();
* mediaPlayerComponent.mediaPlayer().media().pause();
* 另外一些功能还有待补充,如进度条等等
* 菜单栏可以去掉如果不需要的话,我主要是想用来选择文件来播放的,
* 不过代码中并没有具体的实现
*
*/
public class videoplayer {
public static videoplayer thisApp;
private final JFrame frame;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;//声明EmbeddedMediaPlayerComponent对象
public String nextMrl="a.mp4";//下一个视频的文件名,改成你自己
//菜单栏相关组件
public JMenuBar jmb= new JMenuBar();
public JMenuItem jmi= new JMenuItem();//菜单
public JMenu jmu=new JMenu();//
public static void main(String[] args) {
thisApp = new videoplayer(args);
}
public videoplayer(String[] args) {
JPanel containpane =new JPanel();//用来放视频组件已经控制面板
JPanel control =new JPanel();//播放控制面板
frame = new JFrame("My First Media Player");
frame.setBounds(100, 100, 600, 400);//定位、设置大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {//窗口关闭
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
System.exit(0);
}
});
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();//创建EmbeddedMediaPlayerComponent对象
Marquee marquee = Marquee.marquee()//这里是给视频添加字幕
.text("该程序由wocnz创建")
.size(50)
.colour(Color.RED)
.timeout(2000)
.position(MarqueePosition.TOP_LEFT)
.opacity(0.8f)
.enable(true);
marquee.apply(mediaPlayerComponent.mediaPlayer());
JButton pause=new JButton("pause");//暂停按钮
JButton skip=new JButton("skip");//快进按钮
JButton rewind=new JButton("rewind");//后退按钮
control.add(pause);
control.add(skip);
control.add(rewind);
containpane.setLayout(new BorderLayout());
containpane.add(mediaPlayerComponent,BorderLayout.CENTER);
containpane.add(control,BorderLayout.SOUTH);
pause.addActionListener(new ActionListener() { //暂停
@Override
public void actionPerformed(ActionEvent actionEvent) {
mediaPlayerComponent.mediaPlayer().controls().pause();
}
});
skip.addActionListener(new ActionListener() { //快进按钮注册事件
@Override
public void actionPerformed(ActionEvent actionEvent) {
mediaPlayerComponent.mediaPlayer().controls().skipTime(10000);//前进10秒
}
});
rewind.addActionListener(new ActionListener() { //后退按钮注册事件
@Override
public void actionPerformed(ActionEvent actionEvent) {
mediaPlayerComponent.mediaPlayer().controls().skipTime(-10000);//后退10秒
}
});
jmi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
JOptionPane.showMessageDialog(frame,"这个没什么");
}
});
frame.setJMenuBar(jmb);//设置JMenuBar
jmu.setText("选择文件");
jmi.setText("列表");
jmb.add(jmu);//添加菜单
jmu.add(jmi);//添加菜单项
jmb.add(new JMenu("eidt"));//添加菜单栏
frame.setContentPane(containpane);
frame.setVisible(true);
//给视频组件注册事件,重写playing、finished、error方法
mediaPlayerComponent.mediaPlayer().events().addMediaPlayerEventListener(new MediaPlayerEventAdapter(){
@Override
public void playing(MediaPlayer mediaPlayer){
JOptionPane.showMessageDialog(null,"开始播放视频");
}
@Override
public void finished(MediaPlayer mediaPlayer){
JOptionPane.showMessageDialog(null,"视频播放完成");
mediaPlayer.submit(new Runnable() {
@Override
public void run() {
//mediaPlayer.media().play(nextMrl);
//视频播放结束后播放下面的www.mp4视频
//注意mediaPlayer.media().play()方法需要传入一个字符串,代表了播放文件的位置,但是它默认以当前程序运行路径+传入的字符串作为真正的文件播放路径
//所以这里需要new File对象,获得该文件的绝对路径再去传入
File f=new File("E:/www.mp4");
mediaPlayer.media().play(f.getAbsolutePath());
}
});
}
});
mediaPlayerComponent.mediaPlayer().media().play("L4-D2-2.mp4");//这里是从当前程序的运行目录去查找
}
}
程序的主要问题仍然在包导入中. 正确下载和导入软件包实际上是一个很大的步骤. 我还花了很多时间下载软件包. 如果阅读后仍不明白,建议您使用官方网站上的教程,尽管它全是英国的. 但是经过缓慢的思考和理解之后,我相信您也会欣喜若狂.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-244977-1.html
对于su流氓国家
那都是我们的领土就完了
吹吧~~~~~~也不怕牛皮吹破了~~~~~正视敌人~~~~正视敌我之间的差距~~~~~~才是强国强军之道~~~~可怕的不是敌人的强大~~~~~~而是自己的愚蠢~