From 6531e781105e073a55a23529e2b7b31e85110951 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 03 Mar 2025 13:25:46 +0800
Subject: [PATCH] 优化流媒体同步
---
ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java | 66 +++++++++++++++++++-------------
1 files changed, 39 insertions(+), 27 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java
index eb3adc9..e3d03ca 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavStreamManager.java
@@ -4,11 +4,14 @@
import com.ard.tianyu.service.ITyService;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import com.ard.vtdu.domain.ArdVtdu;
+import com.ard.vtdu.domain.Conf;
import com.ard.vtdu.service.IMediaService;
+import com.dtflys.forest.exceptions.ForestNetworkException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -39,39 +42,21 @@
* @param userId 用户ID
*/
public void startPullStream(String boxSn, String userId) {
+ String webrtcUrl = "";
STREAM_USER_MAP.computeIfAbsent(boxSn, k -> ConcurrentHashMap.newKeySet()).add(userId);
-
- String webrtcUrl = BOX_STREAM_PULL_MAP.get(boxSn);
- if (webrtcUrl != null) {
- log.info("{}Already pulled stream: {}", STREAM_LOG_PREFIX, webrtcUrl);
- sendMessageToUser(userId, webrtcUrl);
- return;
- }
-
- try {
- BoxStreamUrlReceiver boxLiveUrl = tyService.getBoxLiveUrl(boxSn);
- if (boxLiveUrl == null) {
+ //不管谁拉流都判断流媒体中是否存在
+ boolean exist = mediaService.checkNameExist(boxSn);
+ if (!exist) {
+ webrtcUrl = addVtdu(boxSn);
+ if (Objects.equals(webrtcUrl, "")) {
log.warn("{}{}{}", STREAM_LOG_PREFIX, STREAM_NOT_FOUND_MSG, boxSn);
sendMessageToUser(userId, STREAM_NOT_FOUND_MSG + boxSn);
- return;
}
-
- ArdVtdu vtdu = ArdVtdu.builder()
- .name(boxSn)
- .mode(0)
- .isCode(0)
- .rtspSource(boxLiveUrl.getRtsp())
- .build();
- ArdVtdu ardVtdu = mediaService.addPath(vtdu);
- webrtcUrl = ardVtdu.getWebrtcUrl();
BOX_STREAM_PULL_MAP.put(boxSn, webrtcUrl);
-
- log.info("{}First pulled stream: {}", STREAM_LOG_PREFIX, webrtcUrl);
- sendMessageToUser(userId, webrtcUrl);
- } catch (Exception e) {
- log.error("{}Failed to start pull stream for box: {}", STREAM_LOG_PREFIX, boxSn, e);
- sendMessageToUser(userId, "Failed to start pull stream due to an internal error.");
+ } else {
+ webrtcUrl = BOX_STREAM_PULL_MAP.get(boxSn);
}
+ sendMessageToUser(userId, webrtcUrl);
}
/**
@@ -102,6 +87,7 @@
}
}
}
+
/**
* 停止拉流
*
@@ -126,4 +112,30 @@
log.error("{}Failed to send message to user: {}", STREAM_LOG_PREFIX, userId, e);
}
}
+
+
+ /**
+ * 通过盒子编号获取rtsp加入流媒体中获取webrtc地址
+ *
+ * @param boxSn 盒子编号
+ * @return String webrtcUrl
+ */
+ private String addVtdu(String boxSn) {
+ try {
+ BoxStreamUrlReceiver boxLiveUrl = tyService.getBoxLiveUrl(boxSn);
+ if (boxLiveUrl != null) {
+ ArdVtdu vtdu = ArdVtdu.builder()
+ .name(boxSn)
+ .mode(0)
+ .isCode(0)
+ .rtspSource(boxLiveUrl.getRtsp())
+ .build();
+ ArdVtdu ardVtdu = mediaService.addPath(vtdu);
+ return ardVtdu.getWebrtcUrl();
+ }
+ } catch (Exception e) {
+ log.error("获取媒体地址异常:{}", e.getMessage());
+ }
+ return "";
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3