通过Java利用vlc实现视频播放器 您所在的位置:网站首页 java编写视频播放器 通过Java利用vlc实现视频播放器

通过Java利用vlc实现视频播放器

2023-11-30 15:33| 来源: 网络整理| 查看: 265

        好久没写东西了,最近也开始整理自己曾经学过的东西。在整理的过程中,我将会每周更新一些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 实验室设备网 版权所有