当前位置: 首页 > news >正文

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

需求:

现在有一批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 {//视频路径URLString 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 blockgrabber.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.lryc.cn/news/17067.html

相关文章:

  • mysql索引失效的几种情况
  • Windows下载安装Redis的详细步骤
  • 【蓝桥杯每日一题】差分算法
  • MyBatis Plus 数据库字段加密处理
  • openpose在win下环境配置
  • 【剑指offer-C++】JZ16:数值的整数次方
  • 了解Axios及其运用方式
  • 【LeetCode】剑指 Offer(7)
  • Python:try except 异常处理整理
  • Redis Lua脚本的详细介绍以及使用入门
  • synchronized和ReentrantLock有什么区别呢?
  • SVHN数据集下载及使用方法
  • 产业安全公开课:2023年DDoS攻击趋势研判与企业防护新思路
  • Docker 容器命令 和安装各种镜像环境
  • 【数据结构】顺序表的深度剖析
  • 当面试官问“你的SQL能力怎么样”时,怎么回答才不会掉进应聘陷阱?
  • AI作画—中国画之山水画
  • Java:Java与Python — 编码大战
  • 山东专精特新各地市扶持政策
  • 持续事务管理过程中的事件驱动
  • 【手把手一起学习】(三) Altium Designer 20 原理图库添加元件
  • 设计模式-行为型模式:观察者模式
  • Springboot 为了偷懒,我封装了一个自适配的数据单位转换工具类
  • 正则表达式
  • java进阶Map 集合
  • Java 方法超详细整理,适合新手入门
  • 软考学习笔记(题目知识记录)
  • 2021.3.3idea创建Maven项目
  • ASP.NET MVC | 创建应用程序
  • 思科设备命令讲解(超基础)