修复工作

This commit is contained in:
2025-10-01 23:12:52 +08:00
parent ca021cdcce
commit cfd0489d3d
3 changed files with 25 additions and 10 deletions

View File

@@ -70,8 +70,8 @@ const getDetails = async (deviceId) => {
tableData.value = res.data;
// 使用当前访问的域名和端口通过Nginx代理访问视频流
// 注意RTSP URL需要原样传递不要编码&&&作为特殊分隔符
// 使用 ffmpeg=true系统自动选择 JavaCV 模式(兼容 HEVC
playUrl.value = `${window.location.origin}/live?url=${tableData.value.url}`;
// 使用 ffmpeg=true系统 FFmpeg 包含完整的编码器支持(包括 libx264
playUrl.value = `${window.location.origin}/live?url=${tableData.value.url}&&&ffmpeg=true`;
console.log('播放地址:', playUrl.value);
handlePlay();
}

View File

@@ -27,7 +27,7 @@ RUN mvn clean package -DskipTests -Denforcer.skip=true -pl ruoyi-admin -am
# 运行阶段 - 使用Debian而不是Alpine以支持JavaCV/FFmpeg
FROM eclipse-temurin:17-jre
# 安装必要的工具和JavaCV/FFmpeg完整依赖
# 安装必要的工具和JavaCV/FFmpeg完整依赖(包含 libx264
RUN apt-get update && apt-get install -y \
curl \
libgomp1 \
@@ -40,6 +40,8 @@ RUN apt-get update && apt-get install -y \
libx11-xcb1 \
libasound2-dev \
ffmpeg \
libx264-dev \
libavcodec-extra \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& rm -rf /var/lib/apt/lists/*

View File

@@ -14,6 +14,7 @@ import io.netty.util.concurrent.GenericFutureListener;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
@@ -83,7 +84,16 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer {
}
public MediaTransferFlvByFFmpeg(CameraDto cameraDto) {
command.add(System.getProperty(MediaConstant.ffmpegPathKey));
// 优先使用系统 FFmpeg包含 libx264如果不存在则使用 JavaCV 的
String ffmpegPath = System.getProperty(MediaConstant.ffmpegPathKey);
// 尝试使用系统 FFmpeg
if (new File("/usr/bin/ffmpeg").exists()) {
command.add("/usr/bin/ffmpeg");
log.info("使用系统 FFmpeg: /usr/bin/ffmpeg");
} else {
command.add(ffmpegPath);
log.info("使用 JavaCV FFmpeg: {}", ffmpegPath);
}
this.cameraDto = cameraDto;
this.enableLog = true; // 临时启用日志,用于调试
buildCommand();
@@ -125,8 +135,8 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer {
/**
* 构建ffmpeg命令
* 注意FLV 格式不支持 HEVC需要转换
* 使用 mpeg4 编码器JavaCV FFmpeg 通常内置
* 注意FLV 格式不支持 HEVC需要转换为 H.264
* 使用 libx264 编码器(系统 FFmpeg 包含
*/
private void buildCommand() {
// 添加日志级别参数(临时调试用)
@@ -136,10 +146,13 @@ public class MediaTransferFlvByFFmpeg extends MediaTransfer {
.addArgument("-max_delay").addArgument("1")
.addArgument("-g").addArgument("25")
.addArgument("-r").addArgument("25")
// 使用 mpeg4 编码器JavaCV FFmpeg 内置,兼容 FLV
.addArgument("-c:v").addArgument("mpeg4")
.addArgument("-q:v").addArgument("5") // 质量参数1-31数字越小质量越好
.addArgument("-b:v").addArgument("800k") // 视频比特率
// 使用 libx264 编码器(系统 FFmpeg 包含,质量最好
.addArgument("-c:v").addArgument("libx264")
.addArgument("-preset").addArgument("ultrafast")
.addArgument("-tune").addArgument("zerolatency")
.addArgument("-b:v").addArgument("1000k") // 视频比特率
.addArgument("-maxrate").addArgument("1000k")
.addArgument("-bufsize").addArgument("2000k")
// 音频编码
.addArgument("-c:a").addArgument("aac")
.addArgument("-strict").addArgument("experimental")