From 1760c801e47aaf8ef3bde5277c48a5bd63152c96 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 6 Nov 2024 16:51:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E7=9B=91=E6=8E=A7=E6=88=AA?= =?UTF-8?q?=E5=9B=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zhgd/xmgl/util/RtspUtils.java | 266 +++++++++--------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/util/RtspUtils.java b/src/main/java/com/zhgd/xmgl/util/RtspUtils.java index 80b60ba6f..10e215738 100644 --- a/src/main/java/com/zhgd/xmgl/util/RtspUtils.java +++ b/src/main/java/com/zhgd/xmgl/util/RtspUtils.java @@ -1,133 +1,133 @@ -package com.zhgd.xmgl.util; - -import lombok.extern.slf4j.Slf4j; -import org.bytedeco.javacv.FFmpegFrameGrabber; -import org.bytedeco.javacv.Frame; -import org.bytedeco.javacv.FrameGrabber; -import org.bytedeco.javacv.Java2DFrameConverter; - -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.math.BigDecimal; -import java.math.RoundingMode; - -@Slf4j -public class RtspUtils { - - private static String RTSP_TRANSPORT_TYPE = "tcp"; - /** - * 视频帧率 - */ - private static int FRAME_RATE = 1; - /** - * 视频宽度 - */ -// private static int FRAME_WIDTH = 1920; - private static int FRAME_WIDTH = 426; - /** - * 视频高度 - */ -// private static int FRAME_HEIGHT = 1080; - private static int FRAME_HEIGHT = 240; - /** - * 遍历500次确保实时图片显示正常图片 - */ - private static int COUNT = 100; - - /** - * 解析视频地址并截图 - * - * @param path rstp 流地址 - * @param picPath 图片存放地址 - * @throws Exception - */ - public static void getVideoImagePathByRSTP(String path, String picPath) throws Exception { - //创建rstp流对象 - FFmpegFrameGrabber grabber = createGrabber(path); - try { - //开启流获取 - grabber.start(); - //由于视频第一帧的流可能为黑屏 为了确保实时能截取到准确图像 - // 故此做了个for循环用于覆盖生成图片 - for (int i = 0; i < COUNT; i++) { - //获取流视频框内的图像 - Frame frame = grabber.grabFrame(); - //转换图像 - Java2DFrameConverter converter = new Java2DFrameConverter(); - BufferedImage srcImage = converter.getBufferedImage(frame); - if (srcImage != null) { - //自定义画图 - int w = srcImage.getWidth(); - int h = srcImage.getHeight(); - int weight = 426; - int height = new BigDecimal(weight).divide(new BigDecimal(w), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(h)).setScale(0, RoundingMode.HALF_UP).intValue(); - BufferedImage bufferedImage = new BufferedImage(weight, height, BufferedImage.TYPE_3BYTE_BGR); - bufferedImage.getGraphics().drawImage(srcImage.getScaledInstance(weight, height, Image.SCALE_SMOOTH), 0, 0, null); - //创建文件 - File file = new File(picPath); - //输出文件 - ImageIO.write(bufferedImage, "jpg", file); - break; - } - } - } finally { - grabber.stop(); - grabber.close(); - } - - - } - - - /** - * 构造视频抓取器 - * - * @param rtsp 拉流地址 - * @return - */ - private static FFmpegFrameGrabber createGrabber(String rtsp) { - // 获取视频源 - try { - FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtsp); - //设置传输方式 TCP | UDP - grabber.setOption("rtsp_transport", RTSP_TRANSPORT_TYPE); - //设置帧率 - grabber.setFrameRate(FRAME_RATE); - //设置获取的视频宽度 - grabber.setImageWidth(FRAME_WIDTH); - //设置获取的视频高度 - grabber.setImageHeight(FRAME_HEIGHT); - // 设置采集器构造超时时间(单位微秒,1秒=1000000微秒) - grabber.setOption("stimeout", "2000000000"); - //设置视频bit率 - // grabber.setVideoBitrate(2000000); - // 过滤坏掉的帧 - grabber.setVideoOption("skip_frame", "nokey"); -// grabber.setOption("Connection", "keep-alive"); - // 设置缓冲区大小为1MB - grabber.setOption("buffer_size", "10240000"); - return grabber; - } catch (FrameGrabber.Exception e) { - log.error("创建解析rtsp FFmpegFrameGrabber 失败"); - log.error("create rtsp FFmpegFrameGrabber exception: ", e); - return null; - } - } - - - public static void main(String[] args) { - try { - //参数1 rtsp 地址自行获取 参数2 截取图片存放地址 - RtspUtils.getVideoImagePathByRSTP("rtsp://222.80.185.228:554/openUrl/uAYM6I0", "C:\\Users\\Administrator\\Desktop\\t\\new\\1000.jpg"); - } catch (IOException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - -} - +//package com.zhgd.xmgl.util; +// +//import lombok.extern.slf4j.Slf4j; +//import org.bytedeco.javacv.FFmpegFrameGrabber; +//import org.bytedeco.javacv.Frame; +//import org.bytedeco.javacv.FrameGrabber; +//import org.bytedeco.javacv.Java2DFrameConverter; +// +//import javax.imageio.ImageIO; +//import java.awt.*; +//import java.awt.image.BufferedImage; +//import java.io.File; +//import java.io.IOException; +//import java.math.BigDecimal; +//import java.math.RoundingMode; +// +//@Slf4j +//public class RtspUtils { +// +// private static String RTSP_TRANSPORT_TYPE = "tcp"; +// /** +// * 视频帧率 +// */ +// private static int FRAME_RATE = 1; +// /** +// * 视频宽度 +// */ +//// private static int FRAME_WIDTH = 1920; +// private static int FRAME_WIDTH = 426; +// /** +// * 视频高度 +// */ +//// private static int FRAME_HEIGHT = 1080; +// private static int FRAME_HEIGHT = 240; +// /** +// * 遍历500次确保实时图片显示正常图片 +// */ +// private static int COUNT = 100; +// +// /** +// * 解析视频地址并截图 +// * +// * @param path rstp 流地址 +// * @param picPath 图片存放地址 +// * @throws Exception +// */ +// public static void getVideoImagePathByRSTP(String path, String picPath) throws Exception { +// //创建rstp流对象 +// FFmpegFrameGrabber grabber = createGrabber(path); +// try { +// //开启流获取 +// grabber.start(); +// //由于视频第一帧的流可能为黑屏 为了确保实时能截取到准确图像 +// // 故此做了个for循环用于覆盖生成图片 +// for (int i = 0; i < COUNT; i++) { +// //获取流视频框内的图像 +// Frame frame = grabber.grabFrame(); +// //转换图像 +// Java2DFrameConverter converter = new Java2DFrameConverter(); +// BufferedImage srcImage = converter.getBufferedImage(frame); +// if (srcImage != null) { +// //自定义画图 +// int w = srcImage.getWidth(); +// int h = srcImage.getHeight(); +// int weight = 426; +// int height = new BigDecimal(weight).divide(new BigDecimal(w), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(h)).setScale(0, RoundingMode.HALF_UP).intValue(); +// BufferedImage bufferedImage = new BufferedImage(weight, height, BufferedImage.TYPE_3BYTE_BGR); +// bufferedImage.getGraphics().drawImage(srcImage.getScaledInstance(weight, height, Image.SCALE_SMOOTH), 0, 0, null); +// //创建文件 +// File file = new File(picPath); +// //输出文件 +// ImageIO.write(bufferedImage, "jpg", file); +// break; +// } +// } +// } finally { +// grabber.stop(); +// grabber.close(); +// } +// +// +// } +// +// +// /** +// * 构造视频抓取器 +// * +// * @param rtsp 拉流地址 +// * @return +// */ +// private static FFmpegFrameGrabber createGrabber(String rtsp) { +// // 获取视频源 +// try { +// FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtsp); +// //设置传输方式 TCP | UDP +// grabber.setOption("rtsp_transport", RTSP_TRANSPORT_TYPE); +// //设置帧率 +// grabber.setFrameRate(FRAME_RATE); +// //设置获取的视频宽度 +// grabber.setImageWidth(FRAME_WIDTH); +// //设置获取的视频高度 +// grabber.setImageHeight(FRAME_HEIGHT); +// // 设置采集器构造超时时间(单位微秒,1秒=1000000微秒) +// grabber.setOption("stimeout", "2000000000"); +// //设置视频bit率 +// // grabber.setVideoBitrate(2000000); +// // 过滤坏掉的帧 +// grabber.setVideoOption("skip_frame", "nokey"); +//// grabber.setOption("Connection", "keep-alive"); +// // 设置缓冲区大小为1MB +// grabber.setOption("buffer_size", "10240000"); +// return grabber; +// } catch (FrameGrabber.Exception e) { +// log.error("创建解析rtsp FFmpegFrameGrabber 失败"); +// log.error("create rtsp FFmpegFrameGrabber exception: ", e); +// return null; +// } +// } +// +// +// public static void main(String[] args) { +// try { +// //参数1 rtsp 地址自行获取 参数2 截取图片存放地址 +// RtspUtils.getVideoImagePathByRSTP("rtsp://222.80.185.228:554/openUrl/uAYM6I0", "C:\\Users\\Administrator\\Desktop\\t\\new\\1000.jpg"); +// } catch (IOException e) { +// e.printStackTrace(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +//} +//