Pu Zhibing
2025-04-10 153b905185b40182978758d409accbb76f678cb1
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/JavaCVStreamUtil.java
@@ -2,19 +2,25 @@
import cn.hutool.core.io.FileUtil;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.service.ICarService;
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.*;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * 音视频推流拉流工具类
 * 参考资料:https://juejin.cn/post/7311230172237561866
 *
 * @author zhibing.pu
 * @Date 2025/4/8 16:03
 */
@Component
public class JavaCVStreamUtil {
   
   private static Map<Integer, FFmpegFrameGrabber> grabberMap = new ConcurrentHashMap<>();
@@ -25,6 +31,11 @@
   
   private static Map<Integer, Boolean> statusMap = new ConcurrentHashMap<>();
   
   @Resource
   private RedisTemplate redisTemplate;
   @Resource
   private ICarService carService;
   
   
   /**
@@ -42,7 +53,8 @@
         }
         OpenCVFrameGrabber openCVFrameGrabber = grabberMap1.get(deviceNumber);
         if(null != openCVFrameGrabber){
            openCVFrameGrabber.close();;
            openCVFrameGrabber.close();
            ;
         }
         FFmpegFrameRecorder fFmpegFrameRecorder = frameRecorderMap.get(deviceNumber);
         if(null != fFmpegFrameRecorder){
@@ -123,7 +135,8 @@
         }
         OpenCVFrameGrabber openCVFrameGrabber = grabberMap1.get(deviceNumber);
         if(null != openCVFrameGrabber){
            openCVFrameGrabber.close();;
            openCVFrameGrabber.close();
            ;
         }
         FFmpegFrameRecorder fFmpegFrameRecorder = frameRecorderMap.get(deviceNumber);
         if(null != fFmpegFrameRecorder){
@@ -208,6 +221,7 @@
   
   /**
    * 关闭推流和拉流进程
    *
    * @param deviceNumber
    */
   public static void close(Integer deviceNumber, String folderPath){
@@ -223,17 +237,14 @@
      try {
         fFmpegFrameGrabber = grabberMap.get(deviceNumber);
         if(null != fFmpegFrameGrabber){
            fFmpegFrameGrabber.flush();
            fFmpegFrameGrabber.close();
         }
         openCVFrameGrabber = grabberMap1.get(deviceNumber);
         if(null != openCVFrameGrabber){
            openCVFrameGrabber.flush();
            openCVFrameGrabber.close();
         }
         fFmpegFrameRecorder = frameRecorderMap.get(deviceNumber);
         if(null != fFmpegFrameRecorder){
            fFmpegFrameRecorder.flush();
            fFmpegFrameRecorder.close();
         }
      }catch (Exception e){
@@ -244,4 +255,6 @@
         FileUtil.del(folderPath);
      }
   }
}