From a152548db005be9227730a3166dc233d94a52c5f Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期四, 31 八月 2023 10:29:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java | 111 +++++++++++++++++++++++++++----------------------------
1 files changed, 55 insertions(+), 56 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
index 090961e..a122234 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -2,7 +2,9 @@
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.media.domain.*;
+import com.ruoyi.media.mapper.VtduMapper;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.utils.forest.MediaClient;
import com.ruoyi.utils.tools.ArdTool;
@@ -33,13 +35,16 @@
@Service
@Slf4j(topic = "cmd")
public class MediaService implements IMediaService {
-
+ @Resource
+ VtduMapper vtduMapper;
@Resource
MediaClient mediaClient;
@Value("${mediamtx.host}")
String mediamtxHost;
@Value("${mediamtx.enabled}")
Boolean mediamtxEnabled;
+ @Value("${mediamtx.software_decoding}")
+ Boolean softwareDecoding;
String processName = "mediamtx.exe";
@@ -64,6 +69,15 @@
// CmdUtils.commandStart(command);
}
}
+ List<StreamInfo> paths = paths();
+ for(StreamInfo path:paths)
+ {
+ mediaClient.removePath(path.getName());
+ }
+ List<Vtdu> vtduList = vtduMapper.selectVtduList(new Vtdu());
+ for (Vtdu v : vtduList) {
+ addPath(v.getName(), v.getRtspUrl(), v.getCodeType(), v.getIsCode());
+ }
}
@PreDestroy
@@ -81,18 +95,24 @@
public String addPath(String name, String rtspPath, String mode, String isCode) {
String rtspUrl = "rtsp://" + mediamtxHost + ":7554/" + name;
Conf mediaInfo = new Conf();
+ String rootPath = System.getProperty("user.dir").replaceAll("\\\\", "/");
//-vcodec libx264 //鎸囧畾瑙嗛缂栫爜鍣ㄤ负 libx264锛屼娇鐢� H.264 缂栫爜鏍煎紡杩涜瑙嗛鍘嬬缉
//-preset ultrafast //--preset鐨勫弬鏁颁富瑕佽皟鑺傜紪鐮侀�熷害鍜岃川閲忕殑骞宠 锛屾湁ultrafast锛堣浆鐮侀�熷害鏈�蹇紝瑙嗛寰�寰�涔熸渶妯$硦锛夈�乻uperfast銆乿eryfast銆乫aster銆乫ast銆乵edium銆乻low銆乻lower銆乿eryslow銆乸lacebo杩�10涓�夐」锛屼粠蹇埌鎱�
//-r 25 //璁剧疆杈撳嚭瑙嗛鐨勫抚鐜囦负 25 甯�/绉�
//-rtsp_transport tcp //杩欎釜閫夐」鍛婅瘔 FFmpeg 浣跨敤 TCP 浣滀负 RTSP 鐨勪紶杈撳崗璁�
//-threads 4: 鎸囧畾瑕佷娇鐢ㄧ殑绾跨▼鏁颁负 4銆�//杩欏厑璁� FFmpeg 鍦ㄥ鏍稿鐞嗗櫒涓婁娇鐢ㄥ涓嚎绋嬫潵杩涜瑙嗛缂栫爜锛屼互鍔犲揩閫熷害銆�
// -i //鐢ㄤ簬鎸囧畾杈撳叆濯掍綋鏂囦欢鎴栬緭鍏ユ祦鐨勫湴鍧�
+ // -bf 0 绂佺敤B甯э紝鍥犱负webrtc鍦ㄧ綉椤佃皟鐢ㄦ椂鎺у埗鍙颁竴鐩磋緭鍑� WebRTC doesn鈥檛 support H264 streams with B-frames
//-f rtsp //杩欎釜閫夐」鍛婅瘔 FFmpeg 杈撳嚭涓� RTSP 鏍煎紡銆�
//CPU杞В鐮佺紪鐮�
- String cmd = "ffmpeg -rtsp_transport tcp -i \"" + rtspPath + "\" -vcodec libx264 -preset:v ultrafast -r 25 -threads 4 -b:v 4096k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
+ //String cmd = rootPath + "/lib/mediamtx/" +"ffmpeg -rtsp_transport tcp -i " + rtspPath + " -vcodec libx264 -preset:v ultrafast -r 25 -threads 4 -b:v 2048k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
//GPU纭В鐮佺紪鐮� -hwaccel cuvid -c:v h264_cuvid 浣跨敤cuda瑙g爜 -c:v h264_nvenc 浣跨敤cuda缂栫爜
- //String cmd = "ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport udp -i \"" + rtspPath + "\" -c:v h264_nvenc -r 25 -threads 4 -b:v 4096k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
+ //String cmd = rootPath + "/lib/mediamtx/" + "ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport udp -i " + rtspPath + " -c:v h264_nvenc -r 25 -threads 4 -b:v 2048k -bf 0 -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
if (isCode.equals("1")) {
+ String cmd = rootPath + "/lib/mediamtx/" + "ffmpeg -rtsp_transport tcp -i " + rtspPath + " -vcodec libx264 -preset:v ultrafast -r 25 -threads 6 -b:v 1024k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
+ if (!softwareDecoding) {
+ cmd = rootPath + "/lib/mediamtx/" + "ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport tcp -i " + rtspPath + " -c:v h264_nvenc -r 25 -threads 6 -b:v 2048k -bf 0 -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
+ }
if (mode.equals("1")) {
mediaInfo.setRunondemand(cmd);
mediaInfo.setRunondemandrestart(true);
@@ -103,7 +123,7 @@
} else {
mediaInfo.setSource(rtspPath);
}
- mediaInfo.setSourceprotocol("udp");
+ mediaInfo.setSourceprotocol("tcp");
mediaClient.addPath(name, mediaInfo);
return rtspUrl;
}
@@ -121,7 +141,7 @@
info.setMode("1");
} else {
runoninit = item.getConf().getRunoninit();
- info.setMode("2");
+ info.setMode("0");
}
//RTSP婧愬湴鍧�
String regex = "rtsp://[^\\s\"]+";
@@ -162,7 +182,7 @@
info.setMode("1");
} else {
runoninit = item.getConf().getRunoninit();
- info.setMode("2");
+ info.setMode("0");
}
//RTSP婧愬湴鍧�
String regex = "rtsp://[^\\s\"]+";
@@ -188,19 +208,6 @@
return pathInfoList;
}
- @Override
- public List<Items> rtspconns() {
- String list = mediaClient.rtspconns();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- return jsonsRoot.getItems();
- }
-
- @Override
- public List<Items> rtspsessions() {
- String list = mediaClient.rtspsessions();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- return jsonsRoot.getItems();
- }
@Override
public RtspSession getRtspSessionById(String sessionId) {
@@ -223,39 +230,11 @@
return rtmpSession;
}
- @Override
- public List<RtspSession> getPushStreams() {
- List<RtspSession> rtspSessions = new ArrayList<>();
-
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
- for (Items item : items) {
- Source source = item.getSource();
- RtspSession rtspSession = getRtspSessionById(source.getId());
- rtspSession.setName(item.getName());
- rtspSessions.add(rtspSession);
- }
- return rtspSessions;
- }
-
- @Override
- public List<RtspSession> getPullStreams() {
- List<RtspSession> rtspSessions = new ArrayList<>();
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
- for (Items item : items) {
- List<Readers> readers = item.getReaders();
- for (Readers reader : readers) {
- RtspSession rtspSession = getRtspSessionById(reader.getId());
- rtspSession.setName(item.getName());
- rtspSessions.add(rtspSession);
- }
- }
- return rtspSessions;
- }
-
+ /**
+ * 鑾峰彇鎺ㄦ祦鍒楄〃
+ * 鍒樿嫃涔�
+ * 2023/8/29 9:37:05
+ */
@Override
public List<StreamInfo> getPushStreamList() {
List<StreamInfo> PushStreamInfoList = new ArrayList<>();
@@ -329,6 +308,11 @@
return PushStreamInfoList;
}
+ /**
+ * 鑾峰彇鎷夋祦鍒楄〃
+ * 鍒樿嫃涔�
+ * 2023/8/29 9:37:05
+ */
@Override
public List<StreamInfo> getPullStreamList() {
List<StreamInfo> PullStreamInfoList = new ArrayList<>();
@@ -380,12 +364,12 @@
//寮�濮嬫媺娴佹椂闂�
info.setBeginTime(webrtcSession.getCreated());
//涓婅娴侀噺
- bytesReceived = webrtcSession.getBytesReceived();
- formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
+ bytesReceived = webrtcSession.getBytesReceived();
+ formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
info.setUpTraffic(formatReceivedSize);
//涓嬭娴侀噺
- bytesSent = webrtcSession.getBytesSent();
- formatSentSize = ArdTool.formatFileSize(bytesSent);
+ bytesSent = webrtcSession.getBytesSent();
+ formatSentSize = ArdTool.formatFileSize(bytesSent);
info.setDownTraffic(formatSentSize);
//鎷夋祦鏈嶅姟鍣�
info.setRemoteAddr(webrtcSession.getRemoteAddr());
@@ -421,6 +405,11 @@
return PullStreamInfoList;
}
+ /**
+ * 韪㈠嚭rtsp浼氳瘽
+ * 鍒樿嫃涔�
+ * 2023/8/29 9:37:05
+ */
@Override
public Boolean kickRtspSession(String sessionId) {
try {
@@ -431,6 +420,11 @@
}
}
+ /**
+ * 韪㈠嚭rtmp浼氳瘽
+ * 鍒樿嫃涔�
+ * 2023/8/29 9:37:05
+ */
@Override
public Boolean kickRtmpSession(String sessionId) {
try {
@@ -441,6 +435,11 @@
}
}
+ /**
+ * 韪㈠嚭webrtc浼氳瘽
+ * 鍒樿嫃涔�
+ * 2023/8/29 9:37:05
+ */
@Override
public Boolean kickWebrtcSession(String sessionId) {
try {
--
Gitblit v1.9.3