From 86a701ce885871d2468ec31eb13be5595673a01b Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 28 三月 2024 10:24:13 +0800
Subject: [PATCH] Merge branch 'master' into dev/abl支持
---
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 103 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index c5b7f58..dd0e885 100755
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -10,6 +10,9 @@
import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
+import com.genersoft.iot.vmp.media.bean.MediaInfo;
+import com.genersoft.iot.vmp.media.event.MediaArrivalEvent;
+import com.genersoft.iot.vmp.media.event.MediaDepartureEvent;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo;
@@ -28,7 +31,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
@@ -85,6 +90,103 @@
@Autowired
private MediaConfig mediaConfig;
+ /**
+ * 娴佸埌鏉ョ殑澶勭悊
+ */
+ @Async("taskExecutor")
+ @EventListener
+ public void onApplicationEvent(MediaArrivalEvent event) {
+ MediaInfo mediaInfo = event.getMediaInfo();
+ if (mediaInfo == null) {
+ return;
+ }
+ if (mediaInfo.getOriginType() != OriginType.RTMP_PUSH.ordinal()
+ && mediaInfo.getOriginType() != OriginType.RTSP_PUSH.ordinal()
+ && mediaInfo.getOriginType() != OriginType.RTC_PUSH.ordinal()) {
+ return;
+ }
+
+ StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(event.getApp(), event.getStream());
+ if (streamAuthorityInfo == null) {
+ streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(event);
+ } else {
+ streamAuthorityInfo.setOriginType(mediaInfo.getOriginType());
+ }
+ redisCatchStorage.updateStreamAuthorityInfo(event.getApp(), event.getStream(), streamAuthorityInfo);
+ StreamPushItem transform = StreamPushItem.getInstance(event, userSetting.getServerId());
+ transform.setPushIng(true);
+ transform.setUpdateTime(DateUtil.getNow());
+ transform.setPushTime(DateUtil.getNow());
+ transform.setSelf(true);
+ StreamPushItem pushInDb = getPush(event.getApp(), event.getStream());
+ if (pushInDb == null) {
+ transform.setCreateTime(DateUtil.getNow());
+ streamPushMapper.add(transform);
+ }else {
+ streamPushMapper.update(transform);
+ gbStreamMapper.updateMediaServer(event.getApp(), event.getStream(), event.getMediaServer().getId());
+ }
+ // TODO 鐩稿叧鐨勪簨浠惰嚜琛岀鐞嗭紝涓嶉渶瑕佸啓鍏LMMediaListManager
+// ChannelOnlineEvent channelOnlineEventLister = getChannelOnlineEventLister(transform.getApp(), transform.getStream());
+// if ( channelOnlineEventLister != null) {
+// try {
+// channelOnlineEventLister.run(transform.getApp(), transform.getStream(), transform.getServerId());;
+// } catch (ParseException e) {
+// logger.error("addPush: ", e);
+// }
+// removedChannelOnlineEventLister(transform.getApp(), transform.getStream());
+// }
+ // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+ redisCatchStorage.addPushListItem(event.getApp(), event.getStream(), event);
+
+ // 鍙戦�佹祦鍙樺寲redis娑堟伅
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("serverId", userSetting.getServerId());
+ jsonObject.put("app", event.getApp());
+ jsonObject.put("stream", event.getStream());
+ jsonObject.put("register", true);
+ jsonObject.put("mediaServerId", event.getMediaServer().getId());
+ redisCatchStorage.sendStreamChangeMsg(OriginType.values()[event.getMediaInfo().getOriginType()].getType(), jsonObject);
+ }
+
+ /**
+ * 娴佺寮�鐨勫鐞�
+ */
+ @Async("taskExecutor")
+ @EventListener
+ public void onApplicationEvent(MediaDepartureEvent event) {
+ // 鍏煎娴佹敞閿�鏃剁被鍨嬩粠redis璁板綍鑾峰彇
+ OnStreamChangedHookParam onStreamChangedHookParam = redisCatchStorage.getStreamInfo(
+ event.getApp(), event.getStream(), event.getMediaServer().getId());
+ if (onStreamChangedHookParam != null) {
+ String type = OriginType.values()[onStreamChangedHookParam.getOriginType()].getType();
+ redisCatchStorage.removeStream(event.getMediaServer().getId(), type, event.getApp(), event.getStream());
+ if ("PUSH".equalsIgnoreCase(type)) {
+ // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+ redisCatchStorage.removePushListItem(event.getApp(), event.getStream(), event.getMediaServer().getId());
+ }
+ if (type != null) {
+ // 鍙戦�佹祦鍙樺寲redis娑堟伅
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("serverId", userSetting.getServerId());
+ jsonObject.put("app", event.getApp());
+ jsonObject.put("stream", event.getStream());
+ jsonObject.put("register", false);
+ jsonObject.put("mediaServerId", event.getMediaServer().getId());
+ redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
+ }
+ }
+ GbStream gbStream = storager.getGbStream(event.getApp(), event.getStream());
+ if (gbStream != null) {
+ if (userSetting.isUsePushingAsStatus()) {
+ storager.mediaOffline(event.getApp(), event.getStream());
+ eventPublisher.catalogEventPublishForStream(null, gbStream, CatalogEvent.OFF);
+ }
+ }else {
+ storager.removeMedia(event.getApp(), event.getStream());
+ }
+ }
+
private List<StreamPushItem> handleJSON(List<StreamInfo> streamInfoList) {
if (streamInfoList == null || streamInfoList.isEmpty()) {
@@ -99,7 +201,7 @@
String key = streamInfo.getApp() + "_" + streamInfo.getStream();
StreamPushItem streamPushItem = result.get(key);
if (streamPushItem == null) {
- streamPushItem = streamPushItem.instance(streamInfo);
+ streamPushItem = streamPushItem.getInstance(streamInfo);
result.put(key, streamPushItem);
}
}
--
Gitblit v1.8.0