| | |
| | | |
| | | 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<>(); |
| | |
| | | |
| | | private static Map<Integer, Boolean> statusMap = new ConcurrentHashMap<>(); |
| | | |
| | | @Resource |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Resource |
| | | private ICarService carService; |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | OpenCVFrameGrabber openCVFrameGrabber = grabberMap1.get(deviceNumber); |
| | | if(null != openCVFrameGrabber){ |
| | | openCVFrameGrabber.close();; |
| | | openCVFrameGrabber.close(); |
| | | ; |
| | | } |
| | | FFmpegFrameRecorder fFmpegFrameRecorder = frameRecorderMap.get(deviceNumber); |
| | | if(null != fFmpegFrameRecorder){ |
| | |
| | | } |
| | | OpenCVFrameGrabber openCVFrameGrabber = grabberMap1.get(deviceNumber); |
| | | if(null != openCVFrameGrabber){ |
| | | openCVFrameGrabber.close();; |
| | | openCVFrameGrabber.close(); |
| | | ; |
| | | } |
| | | FFmpegFrameRecorder fFmpegFrameRecorder = frameRecorderMap.get(deviceNumber); |
| | | if(null != fFmpegFrameRecorder){ |
| | |
| | | |
| | | /** |
| | | * 关闭推流和拉流进程 |
| | | * |
| | | * @param deviceNumber |
| | | */ |
| | | public static void close(Integer deviceNumber, String folderPath){ |
| | |
| | | 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){ |
| | |
| | | FileUtil.del(folderPath); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |