java制作视频播放器

JAVA项目——VLC视频播放器 第一步:初步的配置过程 1.到vlcj官网下载最新版的vlcj 官网地址:http://capricasoftware.co.uk/#/projects/vlcj/tutorial, 最好在这个网址里看一下最新版的说明,看看vlcj支持的VLC版本; 2.到VLC官网下载对应版本的VLC:http://www.videolan.org/ 3.到https://www.slf... 阅读详情

25/03/2017 更新

  • 昨晚无聊,把这个项目稍微整理一下,主要做了以下改动
    • 通过maven来管理项目,github上新分支是maven
    • 原本vlc依赖的动态库和插件集成到项目,项目来取下来即可直接运行,稍微修改播放历史记录读写问题。
    • 运行项目要求jdk是32位,如果jdk是64位需要更换依赖的vlcj的动态库和插件

前言

国庆前几天,无意中看到关于VLCJ包的文章,可以导入java工程制作自己的java视频播放器,感觉有意思,就自己捣鼓几天,做出了个功能较为齐全的跨平台的视频播放器,高级功能之后有时间再弄,我把项目的源码放在自己的Github上,大家感兴趣的可以下载。我会在之后的博客里分享制作这个视频的过程,把重要的代码贴在博客里,分享一下项目过程遇到的问题,及如何解决。本文主要介绍完成后的视频的界面和功能,以及制作视频的一些想法,具体的编码干货在接下来的博客给出。

视频软件整体面板

整体效果

包括播放面板和播放记录列表面板。
播发面板具有:

  • 进度条 播放进度时间和视频总时长 鼠标点击可直接跳到目标时间点
  • 开始/暂停按钮 鼠标点击 或 空格键 即可触发
  • 快进/快退按钮 鼠标点击 或 左右键 即可触发
  • 全屏/退出全屏 鼠标左点击 或 ‘ESC’即可触发
  • 音量控制 鼠标点击直接设置音量 或 上下键逐渐式加大/减小音量 最大音量为120
  • 列表按钮 点击即可弹出播放列表
  • 全屏时 鼠标移动即可出现半透明控制面板 功能有非全屏状态下控制面板完全一样
  • 支持鼠标左键击 暂停播放,再次点击继续播放, 鼠标双击全屏切换
  • -

这里写图片描述

播放器面板

面板具有播放器基本的功能,如图示:具体的功能说明图片给出!
这里写图片描述

播放记录列表

主要实现了 1、清除历史纪录功能,2、点击列表纪录即可播放视频,而且记录列表动态变化。3、历史记录搜索功能目前未实现,等有再实现。

这里写图片描述

全屏状态

鼠标移动即可出现半透明控制面板 功能有非全屏状态下控制面板完全一样
这里写图片描述

VLCJ介绍

原文关于VLCJ介绍:http://capricasoftware.co.uk/#/projects/vlcj

译文:vlcj项目是一个开源项目,它提供了Java 架包和应用程序框架的VLC VideoLAN媒体播放器。

架包可用于构建媒体播放器客户端和服务器软件使用Java——从简单的播放本地媒体文件到一个完整的视频点播流媒体服务器是可以实现。

vlcj被应用在不同的应用程序中,在海洋研究船和定制软件以及在使用IPTV(Internet Protocol Television)和家庭影院的提供视频功能解决方案。

vlcj还在Elphel被用来创建开源软件摄像机和视频公开街道地图项目映射。

这是对vlcj的基本介绍,详细介绍和相关应用可查看其官网!
对于如何利用VLCJ开发自己player,可以参考官网tutorials
http://capricasoftware.co.uk/#/projects/vlcj/tutorial/prerequisites

下面关于介绍如何制作player,主要参考官网的tutorials的,再加一些自己的idea。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
05.10

准备工作

在准备开发自己的视频播放器,需要做些准备工作:
1. 下载 vlc播放器,因为在开发过程中需要调用vlc内核,需要用到libvlc.dll libvlccore.dll, 具体后面博客说明!32位/64位依自己系统下载
下载地址官网:http://www.videolan.org/vlc/index.html
下载地址32位csdn:
http://download.youkuaiyun.com/detail/github_27609763/9152603
2. 下载vlcj jar包,将jna-3.5.2.jar、platform-3.5.2.jar、vlcj-3.8.0、slf4j-api-1.7.12.jar 导入你的工程项目里,需要在工程新建文件夹如:lib,将其复制文件夹下,
下载地址官网:http://capricasoftware.co.uk/#/projects/vlcj
下载地址csnd:
http://download.youkuaiyun.com/detail/github_27609763/9152633
3. 除此外,还需导入其它包,不然会报错,需要下载 slf4j-1.7.12文件,并找到slf4j-simple-1.7.12.jar导入,因为slf4j-api-1.7.12.jar依赖slf4j-simple-1.7.12.jar,而vlcj jar包里没有
下载地址官网:http://www.slf4j.org/
下载地址csnd:
http://download.youkuaiyun.com/detail/github_27609763/9152629
4. 完成之后你的工程里文件夹如截图所示:
5. 这里写图片描述
6. 将这些包添加进你的项目路径,前期准备完成。

开始创建自己的项目,首先建两个包package,com.mian 和com.views,com.main下新建MyMain(或其他名字)主类,com.views(或其他名字)下新建DisplayFrame类。
这里写图片描述

第一种情况:本地默认库位置
当开发vlcj应用程序的第一步是确保vlcj可以找到LibVLC本地库。这些本地库提供公共API LibVLC,就是使您能够将VLC播放器嵌入到您自己的应用程序。

在大多数情况下,vlcj能够找到安装的本地库,如果没有你需要在自己的代码中做添加包所在地址。这种情况很可能是当你的VLC安装到默认位置在您的计算机上。如果是这样,vlcj能够找到利用你的电脑正常索路径找到本地库。

然而,新的开发人员使用vlcj时最常见的问题是如何正确定位这些库。
vlcj提供了一个类,通过搜索电脑的本地路径,可以找到本机的库所在的位置。
代码如下:

package tutorial;

import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;

public class Tutorial {

    public static void main(String[] args) {
        boolean found = new NativeDiscovery().discover();
        System.out.println(found);
        System.out.println(LibVlc.INSTANCE.libvlc_get_version());
    }
}

这个类实例化一个NativeDiscovery类的实例,并调用discover(),返回一个结果显示本地库是否确实是被发现。

检查本地库,下一行的代码打印出找到的LibVLC版本,或者如果没有发现本地库就会抛出一个异常。

如何第一种情况无法实现,则可以按第二种情况提供方式。

第二种情况:显式地设置库路径
如果本机发现不工作,可以显式地设置库路径:

public static void main(String[] args) {
        try {
            listView.setList(listHistory.readHistory());
            listView.setMap(listHistory.readHistoryMap());
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // Decide the platform
        if (RuntimeUtil.isWindows())
            filePath = "D:\\VideoLAN\\VLC";
        else if (RuntimeUtil.isMac())
            filePath = "/Applications/VLC.app/Contents/MacOS/lib";
        else if (RuntimeUtil.isNix())
            filePath = "/home/linux/vlc/install/lib";

        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), filePath);
        System.out.println(LibVlc.INSTANCE.libvlc_get_version());
    }

该块代码摘自我的项目代码,这块代码实现的是在找不到本地默认的库路径,自己显示设置LibVLC路径。而且代码也给出如何实现跨平台的方法。调用RuntimeUtil判断当前平台,并对filePath赋相应的值。

RuntimeUtil.getLibVlcLibraryName()代码是必需的,因为根据您的操作系统命名不同的本地库。

注意:
你设置的目录搜索路径必须同时包含libvlc和libvlccore所在的目录(在linux 两个文件是 .so 结尾,在Windows以 .dll 结尾)。

完成准备工作的内容,你就可以直接运行你的项目为Java Apllication, 测试下是否包和库路径设置正确。

组件框架

vlcj提供了两种编程模型:一个旨在涵盖常见的用例的高级扩展媒体播放器组件框架,一个给你更多的控制权限,创建你的媒体播放器的低级API。

媒体播放器组件框架提供了一个综合一体化的媒体播放器,并且视频面板可以直接添加到用户界面的布局。这些组件提供各种模板方法,你可以选择覆盖定制组件的行为以适应您自己的应用程序。模板方法也被用来提供一个简单的方法来实现媒体播放器的事件处理程序。

相比之下,对于程序开发人员而言,较低级别的API需要更多的工作。您必须创建一个媒体播放器工厂,然后创建一个媒体播放器,视频,将视频表面自己添加到您的用户界面和添加自己的事件监听器。

尽管你使用低级API,但媒体播放器组件框架提供了访问底层媒体播放器和工厂对象。低层API实际上并没有那么复杂,但毫无疑问,组件框架更容易使用和更快的上手。如果你想直接使用底层API,你应该参考Javadoc

开始创建播放器

在DiaplayFrame利通过Swing编程知识创建新的Frame,可以通过WindowBuilder快速创建JFrame,不需要写额外代码,提高编程效率!
创建完的DisplayFrame加入播放器面板,通过导入vlcj库提供的
uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;包,调用EmbeddedMediaPlayerComponent类,实例化对象playerComponent,并将该component添加如JFrame,既完成加载视频第一步。
我的代码设置JFrame的布局为boardLayout,家center加入Jpanel,再设置JPanel为Boardlayout布局,这样是为之后添加控制控件做铺垫,你也可以按自己的喜好设置自己的布局。在JPanel的center添加playerComponent
主要代码如下:

playerComponent = new EmbeddedMediaPlayerComponent();
videoPanel.add(playerComponent, BorderLayout.CENTER);

WindowBuilder下design模式:
这里写图片描述

在添加完内置播放面板,进一步调用
mediaPlayerComponent.getMediaPlayer().playMedia(“path”),播放自己的特定路径的视频。我的代码是将playMedia(“path”),放到后面调用。而是先在MyMain里实例化DisplayFrame对象实例,创建frame,调用DisplayFrame的getMediaPlayer获得之前添加的playComponent,先调用prepareMedia函数,将预播放的视频加载于面板,再调用playMedia(“path”)播放视频。
主要代码:
这里写图片描述

播放视频代码:
这里写图片描述

至此为止,通过调用vlcj高级接口,一个最简单播放器视频已经完成,最关键和主要是之后的功能面板的编写。如开始/暂定、快进/快退、等。
今天写到这,明天再继续。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
07/10/2015

添加按钮实现相应功能

在之前基础上,为视频播放器添加相应的控制功能,实现基本功能:进度条、开始\暂停、停止、快进\快退、音量控制、全屏功能、播放列表。

进度条功能:

显示视频播放的进度
这里写图片描述

如上图所示:在design模式下添加JProgressBar控件,然后鼠标点击JProgressBar添加事件监听,监听视频当前播放的进度。进度条显示的是当前时间/总时长的百分数。为此,需要获取视频当前播放的时间和视频的总时长。
获取视频当前时间currentTime可获取当前播放的视频并调用EmbeddedMediaPlayer类下的函数.getTime();
获取视频总时totalTime长与之类似,需调用EmbeddedMediaPlayer类下的.getLength()。
获取视频播放百分比可得出:percent = currentTime/totalTime,之后再将percent通过调用publish函数在进度条打印显示。
如下图截图中红色区域所示,
绿色区域是附加的显示时间相关代码
这里写图片描述
实现鼠标点击,视频跳转至目标时间点
实现该功能,不难,进度条显示进度的原理与上面提到在进度条显示进度是一样,同时要设置视频播放时间点为目标时间点,对进度条JProgressBar添加鼠标点击监听,获取鼠标的点击时的坐标。
如下截图示,在获取完鼠标的横坐标,将坐标传入自己写的函数jumpTo(),该函数实现视频的播放点设置。
这里写图片描述
这里写图片描述
至此,进度条的基本功能实现。

开始\暂停功能:

在design下添加JButton控件,将变量命名为startBtn,并为该按钮添加鼠标点击监听事件,点击按钮时,程序触发事件,播放视频需调用EmbeddedMediaPlayer类下的.star()函数
暂停按钮添加及添加监听同上,暂停视频需调用EmbeddedMediaPlayer类下的.pause()函数,我是将两个按钮二合一,添加个if语句判断,使两个按钮互相切换。
监听事件代码:
这里写图片描述
监听触发事件时调用的相应函数代码:
这里写图片描述

停止功能:

在design下添加JButton控件,将变量命名为stopBtn,并为该按钮添加鼠标点击监听事件,点击按钮时,程序触发事件,播放视频需调用EmbeddedMediaPlayer类下的.stop()函数
监听事件代码:
这里写图片描述
监听触发事件时调用的相应函数代码:
这里写图片描述

快进\快退功能:

具体添加控件的方法与之前一样,添加完控件对相应控件添加鼠标点击事件监听,快进\快退本质原理和进度条控制原理是一样的,两个功能调用同一个子函数实现,只是快进\快退是视频播放时间前进或后退某个设定的跳跃值,传入给jumpTo()函数的参数,即currentTime = 进度条长度占 进度条总长度百分比 * 视频事件长度。具体如下截图所示:
快进代码:
这里写图片描述
快退代码
这里写图片描述

音量控制

添加控件JSlider,具体同上。在添加完控件,添加JSlider状态变化监听事件,即当滑块滑动,滑块横坐标相应变化,同时将此时滑块的坐标作为音量设置参数。除此之外,为了使程序功能能更完善,还可以给JSlider添加鼠标点击事件。其实这个事件如果开发者自己不添加,系统是会自己默认添加,只是默认点击事件监听是滑块随鼠标点击的次数,渐进式前进或后退,无法实现滑块直接跳跃到鼠标点击的位置,故需自己添加鼠标点击事件监听,JSlider可以自己设定最大最小值,即为音量的变化范围,在鼠标点击事件监听,不能直接将鼠标e.getX()值直接设为最终音量,因为音量最大值和JSlider控件本身长度在数值上市不相等的,需要换算,即鼠标的横坐标(相对JSlider起始点横坐标而言)占JSlider的比例 乘上 最大音量 。具体的两个事件监听见如下代码截图:
这里写图片描述

全屏功能

添加相应的按钮控件,设置鼠标点击事件监听。实现全屏涉及到跨平台的,不同系统调用的本地系统库函数不一样,最后程序兼容性不是那么好,故
对此使用EmbeddedMediaPlayer库下DefaultAdaptiveRuntimeFullScreenStrategy实现。Linux(或更一般的X11)使用全屏策略(使用XFullScreenStrategy的实例),和Windows使用全屏策略(Win32FullScreenStrategy的实例)不同。前面提到的全屏独占模式,他们是调用本地操作系统API函数。但对OSX系统却没有特定的实现策略。
具体实现全屏有多种方式,其中一种如下代码截图所示,其中画红线即为实现全屏一种策略,在进入全屏之后需要将原来窗口下的其它控件设置为隐藏。
这里写图片描述
其它的实现全屏方式可以是:
mediaPlayerComponent.getMediaPlayer().toggleFullScreen();
或
mediaPlayerComponent.getMediaPlayer().setFullScreen(true);
可以效果是一样的,可以自己选择。
EmbeddedMediaPlayer下.getMediaPlayer().isFullScreen()函数是用来判断窗口是否进入全屏状态,之后会用到。

播放列表按钮功能

添加相应的按钮控件,设置鼠标点击事件监听。重新建立一个JFrame窗口,用来并列显示播放列表,当点击按钮,播放器窗口右边会弹出列表窗口。具体列表窗口功能实现,之后再写,明天继续更新如何对这些按钮添加键盘快捷键和双击进入\退出全屏。
直至目前,功能较为完整视频播放器完成,可以实现对视频进行一系列操作。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
08/10/2015

为按钮添加键盘监听事件,添加AWT的低级键盘监听事件,具体见代码:

package com.views;

import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;

import com.main.MyMain;

/**
 * Key board listener
 * @author ganyee
 *
 */
public class KeyBordListenerEven {

    public void keyBordListner(){
        Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
            @Override
            public void eventDispatched(AWTEvent event) {
                // TODO Auto-generated method stub
                if(((KeyEvent)event).getID()==KeyEvent.KEY_PRESSED){
                    switch (((KeyEvent)event).getKeyCode()) {
                    case KeyEvent.VK_RIGHT:{
                        int a = MyMain.getFrame().getVolumControlerSlider().getValue();
                        MyMain.getFrame().getVolumControlerSlider().setValue(a);
                        MyMain.forword((float)(((MyMain.getFrame().getProgressBar().getPercentComplete() * MyMain.getFrame().getProgressBar().getWidth() + 10)) / MyMain.getFrame().getProgressBar().getWidth()));
                    }
                        break;
                    case KeyEvent.VK_LEFT:{
                        MyMain.jumpTo((float)((MyMain.getFrame().getProgressBar().getPercentComplete() * MyMain.getFrame().getProgressBar().getWidth() - 5) / MyMain.getFrame().getProgressBar().getWidth()));
                    }
                        break;
                    case KeyEvent.VK_ESCAPE:{
                        if(!MyMain.getFrame().getMediaPlayer().isFullScreen())
                            MyMain.fullScreen();
                        else
                            MyMain.originalScreen();
                    }
                        break;
                    case KeyEvent.VK_UP:{
                        MyMain.getFrame().getVolumControlerSlider().setValue(MyMain.getFrame().getVolumControlerSlider().getValue() + 1);
                        MyMain.getControlFrame().getVolumControlerSlider().setValue(MyMain.getFrame().getVolumControlerSlider().getValue());
//                      MyMain.getFrame().getVolumLabel().setText("" + MyMain.getFrame().getVolumControlerSlider().getValue());
                    }
                        break;
                    case KeyEvent.VK_DOWN:
                        MyMain.getFrame().getVolumControlerSlider().setValue(MyMain.getFrame().getVolumControlerSlider().getValue() - 1);
                        MyMain.getControlFrame().getVolumControlerSlider().setValue(MyMain.getFrame().getVolumControlerSlider().getValue());
                        break;
                    case KeyEvent.VK_SPACE:{
                        if(MyMain.getFrame().getMediaPlayer().isPlaying()){
                            MyMain.pause();
                            MyMain.getControlFrame().getPlayButton().setText(MyMain.getFrame().getPlayButton().getText());
                        }
                        else{
                            MyMain.play();
                            MyMain.getControlFrame().getPlayButton().setText(MyMain.getFrame().getPlayButton().getText());
                        }
                    }
                        break;
                    }
                }
            }
        }, AWTEvent.KEY_EVENT_MASK);
    }
}

鼠标单击\双击事件监听:
鼠标左键单击,视频停止播放再次点击继续播放视频,鼠标左键双击,切换为全屏模式,再次双击退出全屏模式。
其中实现鼠标双击是比较麻烦些,不是单纯考虑鼠标点击次数就可以,需要将双击和单击区分,不然程序会出现执行判断错误,为此,我是通过设置时间间隔来判断鼠标是否连续点击,如果两次点击在规定时间内,这认为是双击,触发相应时间,其它情况,认为是单击事件。
代码:

......

                @Override
                public void mouseClicked(MouseEvent e) {
                int i = e.getButton();
                if (i == MouseEvent.BUTTON1) {
                    if (e.getClickCount() == 1) {
                        mouseTime = new Timer(350, new ActionListener() {

                            @Override
                            public void actionPerformed(ActionEvent e) {
                                if (playButton.getText() == ">") {
                                    MyMain.play();
                                    btnText = "||";
                                    playButton.setText(btnText);
                                } else {
                                    MyMain.pause();
                                    btnText = ">";
                                    playButton.setText(btnText);
                                }
                                mouseTime.stop();
                            }
                        });
                        mouseTime.restart();
                    } else if (e.getClickCount() == 2 && mouseTime.isRunning()) {
                        mouseTime.stop();
                        if (flag == 0) {
                            MyMain.fullScreen();
                        } else if (flag == 1) {
                            MyMain.originalScreen();
                        }
                    }
                }
            }

        });
......
windows下(java环境)配置最新版的vlcj 最近要利用java写一个视频播放器,觉得vlcj不错,所以把配置过程记录下来,希望能够帮助到需要的人。哪里写的不对的地方还请多多包涵。 1.到vlcj官网下载最新版的vlcj:http://capricasoftware.co.uk/#/projects/vlcj/tutorial,最好在这个网址里看一下最新版的说明,看看vlcj支持的VLC版本; 2.到VLC官网下载对应版本的VLC:htt 阅读详情

相关推荐

Java视频播放器的制作

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

siwuxie095's blog 2302

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

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

gitblog_00081的博客 2013

Java 视频播放器制作,包含代码流程和资源需求。

简单说明 技术方面还请各位海涵,代码和资源引用还有下载方式全部在这里了,这是一个利用Java Swing实现一个简单的视频播放器。由于视频播放器需要解码,这里引用的Java媒体框架(JMF)完成视频解码任务。 代码部分 package cn.video.play; import java.awt.event.ActionEvent; import java.awt.eve...

q74269665的博客 4464

java视频播放器制作_java创建简易视频播放器

java创建简易视频播放器发布时间:2020-09-23 04:28:09来源:脚本之家阅读:98作者:南柯一梦xihe最近有个多媒体的作业,要求使用visualC++和OpenCV编写一个简易的视频播放器,对于C/C++残疾者而言是不可能的,于是萌生了用Java编写的想法。具体经验分享一下。目标:制作简易视频播放器开发工具:eclipse4.5.1;VLC2.2.1具体内容:完成了视频的加载、播...

weixin_31691749的博客 7869

使用java制作一个自己的视频播放器VLCJ

文章目录需求开始 需求 想实现一个可以根据指令无限循环的视频播放让软件,简单的狠就是单纯的播放视频,不需要其他功能什么快进呀,暂停美化呀什么的! 开始 maven <dependencies> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> &

生命不息、战斗不止! 1331

【视频播放器】JavaFX实现视频播放器

对于很多Java开发小伙伴来说,不少童鞋都了解过JavaFX,但介于JavaFX的局限性,可能大多数Java开发者也不是很了解,因而在JavaFX中自然也就缺乏实战经验,但是有时候呢我们也想自己研发一些小程序,比如说前面文章中给大家提到的 图片浏览器 ,或者说音频浏览器、视频浏览器等,那今天小编就带大家走进视频浏览器的编程过程!

小筱在线博客 4846

vlcj--java-制作视频播放器

目标:制作一个简易的视频播放器,实现对视频文件的打开,播放,暂停,退出,以及实现进度条的显示,通过点击视频播放进度条可以更改视频的播放时间。还添加调节音量的功能。工程的准备:因为通过java制作的视频播放器是基于vlcj库建立的,所有必须首先下载vlcj,然后解压导入Java工程中调用。还要下载slf4j库,点击可下载slf4j库,最后由于视频播放器的内核是基于VLC播放器的,所有需要在电脑上下载V

曹世宏的博客 9527

SpringBoot 中 @RequestMapping 及衍生注解的全面解析与实践

本文全面解析Spring Boot中@RequestMapping及其衍生注解的使用,涵盖核心功能、HTTP方法特定注解(@GetMapping/@PostMapping等)、属性详解(路径/参数/头信息等)以及路径变量处理。文章详细介绍了注解的组合使用、继承特性、版本控制策略等高级应用,并针对405/404等常见错误提供解决方案。通过学习这些注解的规范用法,开发者能够构建符合RESTful风格的API接口,提升代码可读性和可维护性。建议优先使用HTTP方法特定注解,合理规划URL结构,并注意避免路径冲突。

Java&AI小吕布的博客 2037

java播放器_Java视频播放器的制作

----------------siwuxie095使用 Java Swing 框架制作一个简单的视频播放器:首先到 VideoLAN 的官网下载 VLC media player,制作的视频播放器内核需要调用VLC media player接着下载相关的在线开源库:vlcj下载链接:vlcj-3.8.0-dist.tar.gz 解压后一览:必备的 4 个 jar 包:(1)jna-3.5.2.j...

weixin_39586649的博客 2762

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1573

视觉定位避坑指南:基于双mark点的坐标转换常见错误排查

本文详细解析了工业视觉项目中基于双mark点的坐标转换常见错误及排查方法,涵盖旋转矩阵构建、坐标系原点选择、图像预处理优化等关键环节。通过实战案例和代码示例,帮助工程师避免定位偏差,提升系统精度,特别适用于自动化检测和精密制造场景。

7z8x2c4v6b9的博客 167

java视频播放器vlcj_vlcj--java-制作视频播放器

目标:制作一个简易的视频播放器,实现对视频文件的打开,播放,暂停,退出,以及实现进度条的显示,通过点击视频播放进度条可以更改视频的播放时间。还添加调节音量的功能。工程的准备:因为通过java制作的视频播放器是基于vlcj库建立的,所有必须首先下载vlcj,然后解压导入Java工程中调用。还要下载slf4j库,点击可下载slf4j库,最后由于视频播放器的内核是基于VLC播放器的,所有需要在电脑上下载...

weixin_42524824的博客 5799

Gemini 2.5 Pro国内免魔法直连教程:5分钟搞定专业级PPT图表(附折线图/柱状图案例)

本文详细介绍了如何利用Gemini 2.5 Pro快速生成专业级PPT图表,包括折线图和柱状图等常见商业图表。通过自然语言交互和智能图表生成功能,用户可以在5分钟内完成数据可视化,大幅提升工作效率。文章还提供了实战案例和高级技巧,帮助用户轻松应对各种商业场景需求。

weixin_30733003的博客 460

Java简易视频播放器(自己学习制作,仅供参考)

使用的是eclipse软件,这是以Java为基础的简易视频播放器,需要jna-5.2.0.jar、jna-platform-5.2.0.jar、vlcj-4.7.0.jar、vlcj-natives-4.1.0.jar包,使用了VLC播放器的VLC内核。(此项目只是自己学习制作,仅供参考)运行图。

csdnsxs的博客 468

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 107

基于Gurobi的综合能源系统运行优化:鲁棒两阶段优化方法

本文提出了一种基于Gurobi的综合能源系统鲁棒两阶段优化方法,针对包含换电站、光伏发电和电池储能的系统运行问题。研究采用多面体不确定性集合描述光伏出力随机性,构建了考虑电池衰减成本和弃光惩罚的两阶段优化模型:第一阶段制定日前调度计划,第二阶段处理实时运行中的不确定性。通过列与约束生成算法求解模型,并使用Python和Gurobi实现。仿真验证了该方法能有效平衡系统经济性与鲁棒性,为含高比例可再生能源的综合能源系统运行提供了实用解决方案。

huanghm88的专栏 240

java制作视频播放器,膜拜大佬

笔者已经把面试题和答案整理成了面试专题文档《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!7)][外链图片转存中…(img-wfM4rDQu-1713847461268)][外链图片转存中…(img-f1G5ibdB-1713847461270)][外链图片转存中…(img-0iv8xyMN-1713847461271)][外链图片转存中…(img-yQB1LaaG-1713847461273)]

2401_84412409的博客 890

影像组学文章复现:ITHscore:通过多尺度放射学特征全面定量NSCLC肿瘤内异质性 ----小细胞肺癌肿瘤异质性评分

目的:通过计算机断层扫描(CT)图像量化非小细胞肺癌(NSCLC)的肿瘤内异质性(ITH)。 方法:整合局部辐射特征和全局像素分布模式,开发定量ITH测量-ITHscore。在六个患者队列(n = 1399)中检查ITHscore与肿瘤表型,基因型和患者预后的关联,以验证其在表征ITH方面的有效性。

xxx 1020

制作Java视频播放器

一、工程准备   首先需要下载并安装VLC播放器,然后下载vlcj外部库。   下载slf4j中的slf4j-api-1.7.13.jar、slf4j- nop-1.7.13.jar      将vlc安装目录下的libvlc.dll、libvlccore.dll 两个文件以及plugins复制到对应的java工程目录下    以下是刚刚配置的...

diaohuaizhi1261的博客 200

Vue3 - Element Plus 下拉选择器 el-select 覆盖修改 placeholder样式,解决覆盖不生效问题(支持修改文字颜色、文字大小、选择器边框、hover效果、宽高等任意样式

vue3,element-plus,el-select,下拉选择器,下拉选择框,Select选择器,deep覆盖无效怎么办,怎么修改placeholder文字颜色,选择器select修改边框样式,修改文字大小,elementPlus选择器如何覆盖hover效果,使用deep改不了样式,修改边框颜色,select去掉边框,vue3+elementPlus中select选择器如何修改placeholder文字样式,修改el-select样式,select选择器样式覆盖不了咋办,el-select如何覆盖原样式,

🏆 前端领域优质创作者 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java制作视频播放器,Java开发者必看避坑指南

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

2301_76668692的博客 554

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[刘阳Java]_酷炫视频播放器制作_JS篇

此文章是接着上次写的《酷炫视频播放器制作_界面篇》将其完善,我们主要给大家介绍一下如何利用JS脚本来控制视频的播放。为了让大家能够保持对要完成的功能有直接的了解,我们还是将效果图附到文章里面 完成本篇文章的代码编写,你能GET到200+代码量,且能够掌握很多有关video标签的属性,函数,事件的应用。当然希望大家也多多鼓励我写出更多更实际的文章来帮助大家学习的提升 第一步:我们先简单实现播...

weixin_30414635的博客 154

ssm框架搭建

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

springMVC -Java 基于vlc制作视频播放器

本系统主要使用 SpringMVC+Hibernate+MySQL+VLC技术实现视频的播放。播放器可以进行播放,暂停,进度条,选择播放文件,音量调节等。前端页面主要实现用户的登录,注册,主页界面,电影界面,电视剧界面,动画片界面,播放记录界面,和管理员。前端页面可以进行视频的下载,播放,删除(管理员才有权限)。配置代码:1.spring-hibernate.xml{code}&lt;beans ...

c_j_k的博客 2614

[刘阳Java]_酷炫视频播放器制作_界面篇

今天开始分享一篇酷炫播放器制作,包括界面+JS。整个案例非常类似腾讯视频,优酷视频,爱奇艺视频。我们先看一下效果图,然后这篇文章主要界面篇 是不是效果比较酷炫,那么我接着来给大家说一下这个界面设计思路 1. 植入BootStrap框架 2. 页面主体区域分为三大块:播放标题,播放内容,播放控制条 因为整个界面大家要想了解整个界面+样式的实现,大家可以将下面的代码拷贝出来运行 &l...

weixin_30670965的博客 277
上一篇: LeetCode解题报告--Merge k Sorted Lists
下一篇: LeetCode解题报告--Swap Nodes in Pairs
YatKam
博客等级 码龄12年 58粉丝 49原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值