From e6941d5ae0ce397c6984bbe731af099bc1d9455b Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Wed, 1 Oct 2025 23:02:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rtsp-vue/src/views/video/device/component/flv.vue | 4 ++-- .../video/thread/MediaTransferFlvByFFmpeg.java | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/rtsp-vue/src/views/video/device/component/flv.vue b/rtsp-vue/src/views/video/device/component/flv.vue index 2fee0c3..6a74657 100644 --- a/rtsp-vue/src/views/video/device/component/flv.vue +++ b/rtsp-vue/src/views/video/device/component/flv.vue @@ -70,8 +70,8 @@ const getDetails = async (deviceId) => { tableData.value = res.data; // 使用当前访问的域名和端口,通过Nginx代理访问视频流 // 注意:RTSP URL需要原样传递,不要编码,&&&作为特殊分隔符 - // 添加ffmpeg=true参数,强制使用FFmpeg转换为FLV格式 - playUrl.value = `${window.location.origin}/live?url=${tableData.value.url}&&&ffmpeg=true`; + // 不使用 ffmpeg=true,让系统自动选择 JavaCV 模式(兼容 HEVC) + playUrl.value = `${window.location.origin}/live?url=${tableData.value.url}`; console.log('播放地址:', playUrl.value); handlePlay(); } diff --git a/ruoyi-video/src/main/java/com/ruoyi/video/thread/MediaTransferFlvByFFmpeg.java b/ruoyi-video/src/main/java/com/ruoyi/video/thread/MediaTransferFlvByFFmpeg.java index 1ec5dc6..eee1d91 100644 --- a/ruoyi-video/src/main/java/com/ruoyi/video/thread/MediaTransferFlvByFFmpeg.java +++ b/ruoyi-video/src/main/java/com/ruoyi/video/thread/MediaTransferFlvByFFmpeg.java @@ -125,6 +125,7 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer { /** * 构建ffmpeg命令 + * 注意:FLV 格式不支持 HEVC,需要转换为 H.264 */ private void buildCommand() { // 添加日志级别参数(临时调试用) @@ -132,18 +133,15 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer { .addArgument("-rtsp_transport").addArgument("tcp") .addArgument("-i").addArgument(cameraDto.getUrl()) .addArgument("-max_delay").addArgument("1") -// .addArgument("-strict").addArgument("experimental") .addArgument("-g").addArgument("25").addArgument("-r").addArgument("25") -// .addArgument("-b").addArgument("200000") -// .addArgument("-filter_complex").addArgument("setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'") - // 使用 copy 直接复制视频流,不重新编码(最快,兼容性最好) - .addArgument("-c:v").addArgument("copy") + // 使用 h264 编码器(JavaCV FFmpeg 内置)而不是 libx264 + .addArgument("-c:v").addArgument("h264") + .addArgument("-preset:v").addArgument("ultrafast") + .addArgument("-tune:v").addArgument("zerolatency") + .addArgument("-b:v").addArgument("1000k") // 视频比特率 // 音频重新编码为 AAC(FLV 需要) .addArgument("-c:a").addArgument("aac") .addArgument("-strict").addArgument("experimental") -// .addArgument("-qmin").addArgument("28") -// .addArgument("-qmax").addArgument("32") -// .addArgument("-b:v").addArgument("448k") .addArgument("-b:a").addArgument("64k") .addArgument("-f").addArgument("flv"); }