From 2e1766b31e889d9ee54d433476d031220dfda294 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期日, 27 四月 2025 17:46:24 +0800 Subject: [PATCH] 处理异常报错 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/JavaCVStreamUtil.java | 15 +++++---------- 1 files changed, 5 insertions(+), 10 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/JavaCVStreamUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/JavaCVStreamUtil.java index 0b80278..4356127 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/JavaCVStreamUtil.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/JavaCVStreamUtil.java @@ -65,9 +65,7 @@ //视频抓帧 grabber = new FFmpegFrameGrabber(inputUrl); - grabber.setOption("rtsp_transport", "tcp"); - // 正确设置超时时间 - grabber.setOption("timeout", "120000"); + grabber.setVideoCodec(avcodec.AV_CODEC_ID_H264); grabber.start(); grabberMap.put(deviceNumber, grabber); @@ -86,14 +84,14 @@ recorder.setGopSize((int) grabber.getVideoFrameRate()); // CRF 是一种用于控制视频/音频质量的参数,它允许在保持目标质量的同时动态地调整比特率。较低的CRF值表示更高的质量,但也可能导致较大的文件大小 recorder.setAudioOption("crf", "23"); - + //设置音频编码为AAC if (grabber.getAudioChannels() > 0) { recorder.setAudioChannels(grabber.getAudioChannels()); recorder.setAudioBitrate(grabber.getAudioBitrate()); - recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); + recorder.setAudioCodec(grabber.getAudioCodec()); } - recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); + recorder.setVideoCodec(avcodec.AV_CODEC_ID_FLV1); //将解码后的帧记录到输出文件中 //recorder.start通常用于处理已经解码成图像的视频数据 recorder.start(); @@ -108,12 +106,9 @@ if (!statusMap.get(deviceNumber)) { break; } - Thread.sleep(500); } } catch (FrameGrabber.Exception | FrameRecorder.Exception e) { e.printStackTrace(); - } catch (InterruptedException e) { - throw new RuntimeException(e); } finally { close(deviceNumber, null); } @@ -191,7 +186,7 @@ recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); } - recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); + recorder.setVideoCodec(avcodec.AV_CODEC_ID_FLV1); //设置音频编码为AAC if (grabber.getAudioChannels() > 0) { recorder.setAudioChannels(grabber.getAudioChannels()); -- Gitblit v1.7.1