JavaSwing_使用树莓派播放视频_三种方法(FX,CLV,CLVJ)_一蓑烟雨任平生

树莓派基本设置--8.播放音频和视频 在Raspberry Pi上播放音频和视频的最简单方法是使用预装的VLC应用程序;VLC程序使用硬件加速,可以播放许多流行的音频和视频文件格式。 阅读详情


前言

项目需求:老板要大屏显示视频,还可以用手机上的微信小程序控制暂停播放


播放视频谁不会?

MP4用爱奇艺播放器啊,迅雷影音啊,腾讯视频啊

树莓派播放?

树莓派专用系统Raspbian底层是Linux,也就是一片漆黑的命令窗口,也不支持那些exe安装的软件

一、使用技术

1.控制设备

使用mqtt,根据订阅的主题不一样进行分发指令

2.怎么窗口播放

这里使用的Swing,比较古老的窗口化,Java的Gui

3.视频卡死

减少线程个数,thread

4.远程显示

VPN可视化界面

5.远程命令链接

PUTTY,有人说用XShell,一样随个人喜好

6.文件传输

FileZilla,这个使用sftp就可以传输,有人说远程桌面,那需要安装xrdp,看个人喜好

二、视频播放

一、omxplayer播放

1.安装树莓派播放器

sudo apt-get install omxplayer

2.播放视频

sodo omxplayer -o hdmi /path/to/filename.mp4 --loop

缺陷:不能控制开始暂停,所以PASS

二.vlc播放

1.环境配置

(1)下载VLC VlC官网http://www.videolan.org/ 各个版本的下载地址http://download.videolan.org/pub/videolan/vlc/last/ 里面有32位和64位的区分,按照自己的系统下载对应的vlc版本,下载解压后提取;
(2)下载VLCJ (http://capricasoftware.co.uk/#/projects/vlcj)把下载文件解压后将其目录下的jna-3.5.2.jar、platform-3.5.2.jar、vlcj-3.8.0.jar(不同版本后缀数字可能会不同)三个文件复制到对应的java工程目录(新建 lib 文件夹)下;

如果是maven工程直接引入maven即可

(3)将vlc安装目录下的libvlc.dll、libvlccore.dll 两个文件以及plugins问佳佳复制到对应的java工程目录下;根目录

2.代码编写

播放器主类代码

package deng.test;

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 uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;

public class PlayerMain {

    static Window frame;
    private static int times=1;
    private static boolean flag=true;
    // private static final String NATIVE_LIBRARY_SEARCH_PATH = "D:\\Program
    // Files\\VideoLAN\\VLC\\sdk\\lib";

    public static void main(String[] args) {

        // 环境配置,将vlc sdk导入到eclipse

        // if(RuntimeUtil.isWindows()){ }
        // NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),
        // "D:\\vlc\\vlc-2.2.6\\sdk\\lib"); //导入的路径是vlc的安装路径
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "vlcj//lib"); // 导入的路径是vlc的安装路径
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
        // System.out.println(LibVlc.INSTANCE.libvlc_get_version());

        // 创建主程序界面运行窗体
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                    try {
                        frame = new Window();
                        frame.setVisible(true);
                        frame.getMediaPlayer().playMedia("video//style.avi"); // 直接播放视屏,参数是视屏文件的绝对路径
                        // frame.getMediaPlayer().prepareMedia("video//test.mp4");
                        // //控制即将播放的视频
                        new SwingWorker<String, Integer>() {

                            @Override
                            protected String doInBackground() throws Exception {
                                // TODO Auto-generated method stub
                                while (flag) { // 获取视频播放进度并且按百分比显示
                                    long total = frame.getMediaPlayer().getLength();
                                    if(total==-1){//如果视频播放完,循环播放视频
                                        play();
                                        times++;
                                        System.out.println(times+"******************");
                                    }
                                    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 dispose(){
        flag=false;
        frame.getMediaPlayer().stop();
        frame.dispose();
    }

    // 打开文件
    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);
    }

    // 实现播放按钮的方法
    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);
    }

}

播放器窗体类:

package deng.test;

import java.awt.BorderLayout;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.awt.event.MouseAdapter;  
import java.awt.event.MouseEvent;

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 uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;  
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;  
  
@SuppressWarnings("serial")
public class Window extends JFrame{  
      
    private JPanel contentPane; //顶层容器,整个播放页面的容器  
    private JMenuBar menuBar;   //菜单栏  
    private JMenu mnFile,mnSetting,mnHelp;  //文件菜单  
    private JMenuItem mnOpenVideo,mnExit;   //文件菜单子目录,打开视屏、退出  
    private JPanel panel;   //控制区域容器  
    private JProgressBar progress;  //进度条  
    private JPanel progressPanel;   //进度条容器  
    private JPanel controlPanel;    //控制按钮容器  
    private JButton btnStop,btnPlay,btnPause;   //控制按钮,停止、播放、暂停  
    private JSlider slider;     //声音控制块  
      
      
    EmbeddedMediaPlayerComponent playerComponent;   //媒体播放器组件  
      
    public static void main(String[] args) {  
          
    }  
  
    //MainWindow构造方法,创建视屏播放的主界面  
    public Window(){  
        setTitle("   小婷婷专属播放器   Copyright@dengchaoqun");  
        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("文件");     //设置菜单名  
        menuBar.add(mnFile);  
        mnSetting=new JMenu("设置");  
        menuBar.add(mnSetting);  
        mnHelp=new JMenu("帮助");  
        menuBar.add(mnHelp);  
          
        mnOpenVideo =new JMenuItem("打开文件"); //设置文件菜单子目录打开文件  
        mnFile.add(mnOpenVideo);  
          
        mnExit =new JMenuItem("退出");    //设置文件菜单子目录退出  
        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();     //实例化控制区域容器  
        videoPane.add(panel,BorderLayout.SOUTH);  
          
        progressPanel=new JPanel(); //实例化进度条容器  
        panel.add(progressPanel, BorderLayout.NORTH);  
  
        //添加进度条  
        progress=new JProgressBar();      
        progressPanel.add(progress);  
        //panel.add(progress,BorderLayout.NORTH);  
        progress.addMouseListener(new MouseAdapter() {  
            @Override  
            public void mouseClicked(MouseEvent e){     //点击进度条调整视屏播放进度  
                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.dispose();
                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();  
    }  
      
    //获取进度条实例  
    public JProgressBar getProgressBar() {  
        return progress;  
    }  
      
}

缺陷:windows开发的不支持Linux,所以Pass

三.JavaFX播放

1.不要看官网,直接开撸

看了FX半天的官网,什么JDK环境必须11+,什么插件安装,什么dll安装,总结四个字:一派胡言

2.直接上代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Duration;

import java.io.File;

/**
 * @Author: 一蓑烟雨
 * @Description: 音频、视频播放Demo
 * @Date: 2021/6/3 21:46
 * @Version: 1.0
 */
public class MediaDemo extends Application{

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage){
        // 音频或视频的路径
        // 举例中的路径为工程根目录下的test.mp4
        // 如果不能正常播放,则音频或视频文件可能损坏;或者有版权,需对应的播放器正常播放;或者录屏后重新尝试,避过版权问题
        //String url = new File(System.getProperty("user.dir") + "/test.mp4").getAbsoluteFile().toURI().toString();
        File url = new File("D://131.mp4");
        //String s = url.getAbsoluteFile().toURI().toString();
        String s = "http://222.133.14.246:19091//hnyfkj-file-server/plugins/im/mp4/20210603/131.mp4";
        //String url = "D://131.mp4";
        Media media = new Media(s);
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        // 设置音量:0.0 - 1.0
        mediaPlayer.setVolume(0.5);
        // 设置开始时间
        mediaPlayer.setStartTime(Duration.seconds(1));
        MediaView mView = new MediaView(mediaPlayer);
        System.out.println(media.getSource());

        VBox vBox = new VBox(3);
        vBox.getChildren().add(mView);
        vBox.setPrefWidth(580);
        vBox.setPrefHeight(360);
        mView.setFitWidth(vBox.getPrefWidth());
        mView.setFitHeight(vBox.getPrefHeight() - 40);

        int fontSize = 16;

        ToggleGroup toggleGroup = new ToggleGroup();

        ToggleButton playButton = new ToggleButton("播放");
        playButton.setFont(new Font(fontSize));
        playButton.setOnMouseClicked(event -> mediaPlayer.play());
        playButton.setToggleGroup(toggleGroup);

        ToggleButton suspendButton = new ToggleButton("暂停");
        suspendButton.setFont(new Font(fontSize));
        suspendButton.setOnMouseClicked(event -> mediaPlayer.pause());
        suspendButton.setToggleGroup(toggleGroup);

        ToggleButton continueButton = new ToggleButton("继续");
        continueButton.setFont(new Font(fontSize));
        continueButton.setOnMouseClicked(event -> mediaPlayer.play());
        continueButton.setToggleGroup(toggleGroup);

        ToggleButton closeButton = new ToggleButton("结束");
        closeButton.setFont(new Font(fontSize));
        closeButton.setOnMouseClicked(event -> mediaPlayer.stop());
        closeButton.setToggleGroup(toggleGroup);

        HBox hBox = new HBox(3);
        hBox.getChildren().addAll(playButton, suspendButton, continueButton, closeButton);
        vBox.getChildren().add(hBox);

        Scene scene = new Scene(vBox,580,360);
        primaryStage.setTitle("MediaDemo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

缺陷:在树莓派系统播放总是Mtqq报错,所以Pass(具体原因还在排查)

三.vlcj播放

vlcj比vlc多了一个字母J,有啥区别?具体区别我也不清楚,不过这个比那个适应力更强,不需要记载本地dll,所以跨平台性比较高,然后可以在任何平台依附平台播放器的安装位置来播放

1.环境搭建

跟clv环境是一样的只不过不需要复制plugs和dll到项目中,因为vlcj是跨平台的,所以Linux不能加载dll,不需要加在dll了

2.代码

播放器代码的实现:

package videoPlayer.Main;

import java.awt.EventQueue;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.SwingWorker;
import com.sun.jna.NativeLibrary;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import videoPlayer.views.MainWindow;

public class MainVideoPlayler {
    //声明全局变量MainWindow
    static MainWindow frame;
    public static void main(String[] args) {
        //实例化NativeDiscovery类
        new NativeDiscovery().discover();
        //通过判断选择系统,Windows,Mac OS,Liunx。以下都是各个系统的VLC默认安装路径
        if (RuntimeUtil.isWindows()) {
            NativeLibrary.addSearchPath(
                RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
        }else if (RuntimeUtil.isMac()) {
            NativeLibrary.addSearchPath(
                RuntimeUtil.getLibVlcLibraryName(), "/Applications/VLC.app/Contents/MacOS/lib");
        }else if (RuntimeUtil.isNix()) {
            NativeLibrary.addSearchPath(
                RuntimeUtil.getLibVlcLibraryName(), "/home/linux/vlc/install/lib");
        }
        EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame = new MainWindow();
                frame.setVisible(true);
                //通过--subsdec-encoding= 可以指定字幕文件编码格式
                String options[] = {"--subsdec-encoding=GB18030"};

				//循环播放
				frame.getMediaPlayer().setRepeat(true);
                //让窗体获得视频资源
                frame.getMediaPlayer().prepareMedia(
                    "D:\\xxxx.mp4",options);
                //prepareMedia();是准备播放视频。而playMedia();是直接播放视频
                //frame.getMediaPlayer().playMedia(
               // "D:\\我的文件\\06、Java语言\\7、界面设计\\10、Java视频播放器的制作\\1、工程的准备.mp4",options);
                new SwingWorker<String, Integer>() {
                    //调节视频音量
                    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<Integer> 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 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 openSubtitle() {
        JFileChooser chooser = new JFileChooser();
        int v = chooser.showOpenDialog(null);
        if (v == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            frame.getMediaPlayer().playMedia(file.getAbsolutePath());
        }
        File file = chooser.getSelectedFile();
        frame.getMediaPlayer().setSubTitleFile(file);
    }
    //实现软件退出
    public static void exit() {
        frame.getMediaPlayer().release();
        System.exit(0);
    }
    //调节音量
    public static void volume(int v) {
        frame.getMediaPlayer().setVolume(v);
    }
}

缺陷:在树莓派系统播放播放一小时会卡关机,但是有思路,我准备先把视频加载缓存到本地,然后进行播放是不是会好点(树莓派本身运行内存就小,所以播放视频还是有难度的,一半用来做嵌入式开发会好一些,播放视频用windows会好点)

总结

方法不同,效果也不同,优缺点也不同,看个人喜好

在这里插入图片描述

树莓派-12-投屏秒变家庭影院kodi跨平台媒体播放器 为什么是打造家庭影院,主要还是因为我有台电视机,想把手机投屏到上面看电影,但又不想买电视盒子,干脆就用树莓派来打造好了。 1 安装kodi kodi是一个屡获殊荣的自由和开源的跨平台媒体播放器和用于HTPC(Home theater PC,家庭影院PC)的数字媒体娱乐中心软件,可以运行在Linux、OSX、Windows、Android 系统。最初为 Xbox 而开发,叫XBMC(全称是XBOX Media Center),顾名思义就是 Xbox平台的媒体中心。 1.1 安装kodi本体和插件 (1)首先s 阅读详情

相关推荐

java实现播放器(附完整源码)

java实现播放器(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1120

JavaSwing_基于VLC media player内核制作一个简单的视频播放器

目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器

wangkai13810651628的博客 2658

基于java的视频播放程序系统设计与实现

基于Java的视频播放程序系统设计与实现的系统性能评估的总结和分析如下:随着视频行业的发展,越来越多的用户使用在线视频平台观看视频,因此视频播放程序的系统性能对于在线视频平台来说至关重要。本文通过设计一个基于Java的视频播放程序系统,并对其性能进行评估,来探讨Java视频播放程序的性能优化和性能优化方案。首先,我们设计了一个基于Java的视频播放程序系统,该系统包括前端页面、后端服务器和数据库等组件。

woaimx_1314的博客 1553

Java Swing播放器,功能完善,完整源码 直接使用 窗体版本

本项目是一个音乐播放器,主要实现MP3的播放,实现的主要功能,包括以下功能点 1 点击播放清单。首先选择要添加的MP3清单,一次添加一条,也可以添加多条。 2 点击开始,播放当前选中的MP3歌曲(循环播放和单曲播放) 3 点击停止,播放当前选中的MP3歌曲 4 上一曲:跳转到上一首播放的歌曲 5 下一曲:跳转到下一首播放的歌曲 6 删除当前播放的歌曲清单 7 清空播放清单:删除播放清单的所有歌曲. 该项目提供完整源码,合适做课程设计,下载源码不修改做任何修改,直接运行!!!

bangxiecode的博客 1736

swing 播放 rtsp 视频

电脑上需要安装 vlc 播放器,然后用再运行此程序 就可以直接打开了 利用 vlcj 插件。 mediaPlayerComponent = new EmbeddedMediaPlayerComponent(); // mediaPlayerComponent.getMediaPlayer().addMediaOptions(":network-caching=500"); mediaPlayerComponent.setSize(1280, 960); frame.getContentPane().setLayout(null); frame.add(mediaPlayerComponent); frame.setLocation(100, 100); frame.setSize(1440, 1024); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); MediaPlayer player = mediaPlayerComponent.getMediaPlayer(); String[] options = {"video-filter=motionblur", "network-caching=200", "no-plugins-cache"}; player.playMedia("rtsp://admin:1qaz2wsx@192.168.0.102:554/h264/ch1/main/av_stream",options);

vlcj-javafx-demo:示例应用程序显示vlcj在JavaFX场景中渲染视频

对于使用当前正在开发的vlcj-5.0.0和LibVLC 4.0.0的全新前沿演示应用程序,请切换到。 vlcj-javafx-demo 该演示演示了如何使用vlcj将视频呈现到JavaFX Canvas。 新的JavaFX PixelBuffer用于避免全帧缓冲区复制,这是强烈建议使用的方法。 看: 使用PixelBuffer,本地视频缓冲区直接与JavaFX共享,从而避免了每个视频帧的全帧复制。 PixelBuffer的性能确实很好。 该解决方案可能会胜过Swing / Java2D的实现,并且可能是跨平台媒体播放器的最佳方法(即使在OSX上,OSX长期以来都不支持最佳嵌入式解决方案。) GPU支持 Java7下的JavaFX中,甚至对现代视频卡的GPU支持也很差。 目前,nVidia卡似乎得到了更好的支持。 如果不支持您的视频卡,则JavaFX将回退到软件渲染器。 这会

javaFx使用vlc播放器播放流媒体

vlc是一个很不错的视频播放器 下载地址 https://www.videolan.org/ 如何测试流媒体链接? 如何在javaFx项目中集成vlc播放器? https://github.com/caprica 1、导入依赖jar <dependency> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-javafx</artifactId

Jhone_csdn的专栏 3359

当R语言遇见MaxENT:参数优化的艺术与自动化调参实践

本文探讨了R语言与MaxENT在生态位建模中的结合应用,重点介绍了参数优化与自动化调参的实践方法。通过caret与ENMeval工具链,研究人员可以高效处理多物种、多环境变量的大规模分析任务,提升模型性能与工作效率。文章还涵盖了从数据准备到结果可视化的全流程,为生态学家提供了实用的技术指导。

corn8的博客 455

树莓派3b终端命令行播放器omxplayer,通过HDMI屏幕播放视频

树莓派可以通过omxplayer,使用命令行播放视频。并通过 HDMI显示到屏幕上。 1. 安装omxplayer sudo apt-get install omxplayer 将一段mp4视频,通过FTP传输到树莓派中。 2. 使用命令行播放该视频 omxplayer -o hdmi /home/pi/DJI-MAVIC-AIR2.mp4 循环播放: omxplayer -o hdmi /home/pi/DJI-MAVIC-AIR2.mp4 --loop -...

Mark_md的博客 7574

中国30米逐年植被净初级生产力(NPP)数据集(1982年至今CASA模型)

1.3 气温、降水、地表太阳辐射数据 气温和降水数据月度空间插值数据是基于全国2400多个站点的日观测数据,在计算各气象要素月值的基础上,基于Anusplin软件插值生成的1982年以来各月度30米分辨率气温和降水栅格数据,插值过程中引入高程作为协变量。气温单位为℃,降水单位为mm。1.2 土地覆盖数据 土地覆盖数据来源于1985 年-2020年全球30米精细地表覆盖动态监测产品,该数据集包含29个地表覆盖类型,进行拼接、裁剪、重分类和重采样处理,获得8期250米分辨率的植被类型数据。

地球资源数据云的官方博客 2839

全志T113-S3 Linux系统移植实战:从硬件配置到内核启动全解析

本文详细解析了将Linux系统移植到全志T113-S3嵌入式芯片的完整实战流程。内容涵盖从开发环境搭建、Longan SDK源码获取,到关键的U-Boot配置、DDR初始化、Linux内核编译与设备树定制,以及根文件系统构建与启动脚本分析。文章结合硬件配置与启动日志解读,提供了从硬件配置到内核启动的全方位指导,帮助开发者高效完成系统移植。

ik67890123的博客 512

java能不能播放mp4_如何在Java Swing应用程序中播放MP4视频

感谢@VGR引起了我对JavaFX的关注,我将JFXPanel集成到了我想要视频放置的JPanel中.就我而言,它工作得很好,因为它是一个可以播放一个视频的简单屏幕.以下是完整的代码段:private void getVideo(){final JFXPanel VFXPanel = new JFXPanel();File video_source = new File("tutorial.mp4...

weixin_30737899的博客 1894

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 961

javafx 使用VLC media player播放器及加入视频缓冲区优化性能

在做的我的开源项目IceoLogy壁纸时,由于要做视频壁纸,javafx自带的mediaView性能并不理想,支持的格式也挺少的,几经搜索发现开源的VLC media player有口皆碑,挺不错的,使用开源的demo运行发现cpu占用异常的高,我i7-9750H的CPU也占到了40%,稳定在25%左右,几经搜寻在外网找到了加入视屏缓冲区来优化的解决方案,加入缓冲区后播放同一视频cpu使用率稳定在8%左右 import javafx.application.Application; import jav

百块富翁的博客 2950

轮式并联五连杆下肢机器人运动控制:从建模到强化学习仿真训练

本文提出了一种基于强化学习的轮式并联五连杆下肢机器人运动控制方法。首先建立了机器人的运动学和动力学模型,推导了正逆解公式,并构建了URDF模型。随后在PyBullet仿真环境中搭建了包含复杂地形的训练场景,设计了基于PPO算法的端到端控制策略,包含状态空间、动作空间和奖励函数的详细设计。通过多组仿真实验验证了该方法在台阶攀爬等任务中的有效性,为轮腿机器人运动控制提供了完整的可复现技术方案。

huanghm88的专栏 347

分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

🔥 分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

XiaoqiangClub的博客 476

Java实现简单在线播放器——支持优酷和土豆

今天本来是打算继续写“Java新浪微博客户端开发”的,也实现了“系统托盘”,“点击查看大图”的功能,写到一半,想起上篇博文中有优快云有一网友提及客户端中播放微博的视频的功能,自己之前完成的客户端也没实现这功能,于是打算试着实现。百度、google了好一会,发现网上Java实现的视频播放器基本不能用到微博客户端。PS:视频播放等媒体相关的可通过JMF实现。 最后,耍了点小聪明,“另类”的实现

#include<Cannel_2020> 2万+

硬核干货|C#+EtherCAT协议:高精度多轴伺服运动控制通信实战

本文摘要: 文章聚焦工业自动化领域多轴伺服运动控制的高精度与实时性需求,基于C#与EtherCAT协议实现完整解决方案。EtherCAT凭借微秒级同步、分布式架构等优势成为首选,而C#通过优化GC策略和实时线程可满足工业控制要求。文章从工程落地角度,详细拆解EtherCAT的PDO/SDO通信机制与多轴同步控制逻辑,提供完整的C#代码实现(主站初始化、伺服配置、运动控制等),所有代码均通过汇川/松下伺服实测验证。核心亮点包括:纯C#原生开发、工业现场高频问题解决方案、硬件适配指南,帮助开发者快速掌握高精度多

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 575

java媒体播放器

山东大学软件学院面向对象设计技术课程的实验之一。(说起来这些实验感觉没有什么太难的地方,基本没有什么实用性。)。(还有一个感受,重修太痛苦,别人两个人写一个,我要一个人写两个。好像我也算不上重修) 模拟实现一个多功能媒体播放器,它能播放音频(如mp3歌曲)、视频(选作,不属于基本要求)。媒体播放器界面,有进度条,可展示总播放时间、当前播放时间,进度条可拖动,有播放、暂停键,有快进、快退键。 文章目录0 效果1 解耦2 界面2.1 界面组织结构2.2 重写进度条UI2.3 面板切换3 音乐功能3.1 音乐.

zzc_zhuyu的博客 3284

基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(项目资料ID:4)

本研究旨在设计一款高度智能化的智能小车系统,通过集成 STM32 微控制器、ESP8266 无线模块、手机 APP 以及阿里云平台,实现环境数据实时采集、远程精准控制和高效的数据交互。详细阐述系统各部分的设计原理、实现过程和测试结果,验证系统在实际应用中的可行性和有效性,为智能小车在多领域的应用提供技术支持。

以培养嵌入式工程师为己任 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【亲测免费】 VLCJ:在Java中无缝集成VLC媒体播放器

是一个Java库,它允许开发者直接在他们的Java应用程序中嵌入和控制找到。 ## 技术分析 VLCJ利用JNI(Java Native Interface)与VLC的原生库进行交互,这样就不需要通过系统命令行或外部进程启动VLC。这意味着你可以直接在你的Java代码中创建、配置和操作VLC实例,而无需离开熟悉的Java环境。 **关键特性:** 1. **完全控制** - 使用VLCJ,

gitblog_00081的博客 2013

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java怎么播放mp4,如何在Java Swing应用程序中播放MP4视频

Does anyone know any way I can play an .mp4 video file in a JPanel?I have tried JMF with .avi file but found no success and now I'm baffled and frustrated at how such a simple task of playing a video ...

weixin_39821189的博客 1149

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java swing(GUI) MySQL实现的视频播放器系统源码+运行教程

今天给大家演示一下由Java swing实现的一款简单的多媒体播放器,项目源码我会放在我的网站上,并配有视频配置教程,保证运行起来的。这个小播放器实现了视频、音频文件的播放、暂停、快进、快退、停止、全屏等功能,还有历史记录功能,调用的是vcl库的播放内核。接下来我们来看看如何操作运行起来。1. 安装vcl播放器。有32位的和64位的,根据你的电脑安装相应的版本,安装好后记住安装目录,如下是我的安装目录:正在上传…重新上传取消2. 将项目源码导入到eclipse,这里说明一下,我的电脑上装的是jdk1.8,所

所有项目源码实战教程均可在【猿来入此】下载 1888

Java视频播放器的制作

----------------siwuxie095 使用 Java Swing 框架制作一个简单的视频播放器: 首先到 VideoLAN 的官网下载 VLC media player,制作的视频播放器内核 需要调用 VLC media player VideoLAN:http://www.video...

weixin_30716141的博客 618

raspberry pi播放音视频

是 POSIX 操作系统的声音服务器系统,这意味着它是您的声音应用程序的代理。了解的思路是安装 gstreamer1.0, 然后ffmpeg, 单独下载qt源码进行安装编译 进行对应配置说明设置, 但由于本人比较懒, 这个就取消了,但最终也没怎么解决, 后续再看看验证此方法, 或者读者有更好方法, 或者已经验证此方法可行, 也请麻烦告知一下, 互相学习。alsamixer是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。

liunanya的博客 1414

基于java.swing的可视化播放器

java可视化播放器

IT_lzer的博客 1255
上一篇: 一行代码搭建一个简易的本地文件服务器_附带外网教程_一蓑烟雨任平生
下一篇: Java_搭建MQTT服务器_一蓑烟雨任平生
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值