视频流截取保存到本地路径(打包jar包CMD运行)

news2024/11/25 0:39:12

需求:

现在有一批https的监控视频流URL,需要对视频流进行每三秒截屏一次,并保存到本地路径,png格式,以当前时间命名。

代码:

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws IOException {
        //视频路径URL
        String file = "https://os7.com/v3/openlive/K95.m3u8?expire=1731&id=5658&ev=100";
        FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(file);
        grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
        // grabber.setImageWidth(1920);
        // grabber.setImageHeight(1080);
        // 设置采集器构造超时时间(单位微秒,1秒=1000000微秒)
        grabber.setOption("stimeout", "9000000");
        System.out.println("grabber start");
        grabber.start();
        //1.播放视频
/*
        CanvasFrame canvasFrame = new CanvasFrame("摄像机");
        canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        canvasFrame.setAlwaysOnTop(true);
        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
        while (true){
            Frame frame = grabber.grabImage();
            opencv_core.Mat mat = converter.convertToMat(frame);
            canvasFrame.showImage(frame);
        }
 */
        // 2.帧截图

        while (true) {

            try {
                Date date = new Date();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
                System.out.println("当前时间" + dateFormat.format(date));

                File outPut = new File("D:\\截屏\\截取1\\" + dateFormat.format(date) + ".png");
                Frame frame = grabber.grabImage();


                if (frame != null) {
                    /**
                     * 发送post请求
                     */
//            try {
//                HttpUtil.doPostToJson("http://sc.dev-forestrycloud.cn/detect",frame);
//            } catch (Exception e) {
//                throw new RuntimeException(e);
//            }
                    ImageIO.write(FrameToBufferedImage(frame), "png", outPut);
                    System.out.println("图片已保存");
                }
                //睡眠三秒钟
                Thread.currentThread().sleep(3000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                grabber.stop();
                grabber.release();
                e.printStackTrace();
            }

        }
    }

    /**
     * 创建BufferedImage对象
     */
    public static BufferedImage FrameToBufferedImage(Frame frame) {
        Java2DFrameConverter converter = new Java2DFrameConverter();
        BufferedImage bufferedImage = converter.getBufferedImage(frame);
//        bufferedImage=rotateClockwise90(bufferedImage);
        return bufferedImage;
    }

    /**
     * 处理图片,将图片旋转90度。
     */
//    public static BufferedImage rotateClockwise90(BufferedImage bi) {
//        int width = bi.getWidth();
//        int height = bi.getHeight();
//        BufferedImage bufferedImage = new BufferedImage(height, width, bi.getType());
//        for (int i = 0; i < width; i++)
//            for (int j = 0; j < height; j++)
//                bufferedImage.setRGB(j, i, bi.getRGB(i, j));
//        return bufferedImage;
//    }
}

这是一个Maven工程,还需要在pom文件导入如下依赖

        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.4.4</version>
        </dependency>

运行

打包(jar包)

由于IDAE太吃内存了,截取视频流需要挂在后台一直跑,我们打包丢在cmd里跑

因为在Maven中引入了依赖,所以打包前要在pom文件加入如下build

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.5.5</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.yj.TCPClient.upload.App</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <!-- 添加此项后,可直接使用mvn package | mvn install -->
            <!-- 不添加此项,需直接使用mvn package assembly:single -->
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

直接使用Maven进行package

打包完成后target下会有两个jar包

带-with-dependencies的就是含有依赖的jar包

打开cmd Java-jar

发现报错了,找不到或无法加载主类 com.yj.TCPClient.upload.App

使用压缩软件打开此jar包下的META-INF

再用记事本打开MANIFEST.MF

用来是Main-Class出现了错误,我们自己手动修改一下

主类路径,就是java包下main方法的相对路径

修改后

然后再跑一次

方法二

参考了下面博客打包它的Main-Class是正确的

解决IDEA打Jar包找不到或无法加载主类问题_敲代码的余文乐的博客-CSDN博客_启动jar包找不到或无法加载主类

按照上面这篇博客重新打包一次,在项目的out下会生成一个jar包,可以直接跑

检查一下,这个jar包的MANIFEST.MF

正确!

对比一下,IDEA与cmd消耗内存对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序登录

小程序登录 | 微信开放文档 (qq.com)https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 静默登录 首先需要在微信开发者工具中获取code(wx.login(Object object) | 微信开放文档 (qq.com)) 前端处理获取code其次&#xff1a;需要appid,se…

PyQt5数据库开发2 5.1 QSqlQueryModel

目录 一、Qt窗体设计 1. 新建Qt项目 2. 拷贝4-3的部分组件过来 3. 添加资源文件 4. 创建Action 5. 添加工具栏 6. 创建菜单项 7. 关闭Action的实现 8. 调整布局 8.1 调整两个groupbox的布局 8.3 为窗体设置全局布局 二、代码拷贝和删除 1. 新建项目目录 2. 编译…

游戏化销售管理是什么?使用CRM系统进行有什么用?

对于企业销售来说&#xff0c;高薪酬也伴随着更高的压力与挑战。高强度的单一工作会让销售人员逐渐失去对工作的兴趣&#xff0c;导致销售状态缺少动力和激情&#xff0c;工作开展愈加困难。您可以通过CRM系统进行游戏化销售管理&#xff0c;让销售人员重新干劲满满。 游戏并不…

Matlplotlib绘图

0 建议学时 4学时 1 Matlplotlib库介绍 Matplotlib库由各种可视化类构成&#xff0c;内部结构复杂 受Matlab启发&#xff0c;matplotlib.pylot是绘制各类可视化图形的命令字库&#xff0c;相当于快捷方式 Matplotlib中文网&#xff1a;https://www.matplotlib.org.cn 安装&…

【离线数仓-4-数据仓库设计】

离线数仓-4-数据仓库设计离线数仓-4-数据仓库设计1.数据仓库分层规划2.数据仓库构建流程1.数据调研1.业务调研2.需求分析3.总结2.明确数据域3.构建业务总线矩阵&维度模型设计4.明确统计指标1.指标体系相关概念1.原子指标2.派生指标3.衍生指标2.指标体系对于数仓建模的意义5…

Python-可变类型、不可变类型和遍历列表

1.可变类型和不可变类型python的类型根据值是否可变分为两类可变类型:列表、字典、集合等 值可以改变不可变类型&#xff1a;数字、字符串、元组等 值不可以改变注意&#xff1a;可变类型对象和不可变类型对象都不能更改类型本身2.遍历列表2.1正序遍历提前通过len函数获取元素总…

蓝桥杯:聪明的猴子

题目链接&#xff1a;聪明的猴子https://www.lanqiao.cn/problems/862/learning/ 目录 题目描述 输入描述 输出描述 输入输出样例 运行限制 解题思路&#xff1a; 最小生成树 AC代码&#xff08;Java&#xff09;: 课后练习&#xff1a; 题目描述 在一个热带雨林中生存…

20230223 刚体上的两个点速度之间的关系

刚体上的两个点速度之间的关系 注意&#xff1a;这里所讨论的都是投影在惯性坐标系上的。 dMAdMOdOAdMOdCA−dCOd_{_{MA}}d_{_{MO}}d_{_{OA}}d_{_{MO}}d_{_{CA}}-d_{_{CO}}dMA​​dMO​​dOA​​dMO​​dCA​​−dCO​​ 求导 d˙MAd˙MOd˙CA−d˙CO\dot d_{_{MA}}\dot d_{_…

《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(三)

声明&#xff1a;此系列答案配套《计算机组成与系统结构&#xff08;第二版&#xff09; 裘雪红 李伯成 西安电子科技大学出版社》一书相关内容。所有内容为博主个人编辑&#xff0c;仅作参考学习交流之用&#xff0c;转载请注明出处。如发现错误&#xff0c;请联系博主及时勘误…

Spring解决循环依赖为什么需要三级缓存?

前言什么是循环依赖呢&#xff1f;我们抛开Spring这个框架来聊下什么是循环依赖&#xff0c;循环依赖可能在我们平时的开发过程中是属于比较常见的。Spring容器最大的功能就是对bean的生命周期进行管理&#xff0c;每个bean在创建的过程中&#xff0c;需要得到一个完整的bean需…

python2.75升级到python3

linux centos7.6版本默认的python是2.7&#xff0c;现在想安装python3.8&#xff0c;操作如下下载python3.8安装包&#xff1a;wget http://npm.taobao.org/mirrors/python/3.8.0/Python-3.8.0.tgz&#xff0c;我执行的目录是cd /usr/local/解压下载的包&#xff1a;进入文件夹…

【LeetCode】剑指 Offer(7)

目录 写在前面&#xff1a; 题目剑指 Offer 17. 打印从1到最大的n位数 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 18. 删除链表的节…

【项目精选】jsp企业快信系统(论文+视频+源码)

点击下载源码 计算机网络的出现到现在已经经历了翻天覆地的重大改变。因特网也从最早的供科学家交流心得的简单的文本浏览器发展成为了商务和信息的中心。到了今天&#xff0c;互联网已经成为了大量应用的首选平台&#xff0c;人们已经渐渐习惯了网络交易&#xff0c;渐渐对网络…

CVE-2022-48282 MongoDB .NET/C# 驱动存在反序列化漏洞

漏洞描述 MongoDB .NET/C# 驱动用于将 .NET 应用程序连接到 MongoDB 集群并建立通信&#xff0c;并使用 _t 字段鉴别属性名称。 MongoDB .NET/C# 驱动 2.19.0 之前版本存在反序列化漏洞&#xff0c;对于用 C# 编写的应用程序&#xff0c;攻击者满足以下条件时可利用此漏洞远程…

SFP光纤笼子 别称 作用 性能要点 工程要素

Hqst盈盛电子导读&#xff1a;2023年&#xff0c;Hqst盈盛电子于下属五金部开发生产SFP光纤连接器笼子等系列产品&#xff0c;所有产品生产及性标准都将参照连接器产品常用测试标准EIA-364-C等标准&#xff0c;以下为我司常规SFP光纤连接器基本性能要求SFP光纤笼子别称&#xf…

HTML基本语法-标签

注释 注释就是帮助我们理解的解释 本身不参加编译 HTML里面的注释 <!--这是被注释的内容-->我们也可以直接使用ctrl/&#xff08;快捷键&#xff09; 来实现光标行注释 标签基础认知 标签构成 有双标签-开始和结束 就之前 的加粗标签和标题标签 标签关系 父子关系…

【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】

文章目录前言1.高精度加法2.高精度减法3.高精度乘法4.高精度除法写在最后前言 当我们在利用计算机进行一些计算时&#xff0c;可能会遇到这类问题 &#xff1a; 有些计算要求精度高&#xff0c;希望计算的数的位数可达几十位甚至几百位&#xff0c;虽然计算机的计算精度也算较…

PostgreSQL的安装配置及使用

一.安装地址&#xff1a;https://www.postgresql.org/选择合适的版本下载二.配置mac 配置 pg_hba.conf 文件open .bash_profile export PATH$PATH:/Library/PostgreSQL/14/bincd /Library/PostgreSQL/14 sudo -u postgres bash cd data vim pg_hba.conf进入编辑模式&#xff1…

angular

1. angular获取不到DOM结点 angular中的ngOnInit钩子函数获取不到DOM节点&#xff1b; 这个钩子函数中&#xff0c;表示组件和指令初始化完成&#xff0c;并不是真正的DOM加载完成&#xff1b; 所以这时候需要利用另外一个钩子函数ngAfterViewInit()&#xff0c;是在视图加载完…

传统单体架构存在哪些问题?

传统单体应用架构模型通常我们所使用的传统单体应用架构都是模块化的设计逻辑&#xff0c;程序在编写完成后会被打包并部署为一个具体的应用&#xff0c;而应用的格式则依赖于相应的应用语言和框架。例如&#xff0c;在网上商城系统中&#xff0c;Java Web工程通常会被打成WAR包…