Browse Source

拉流代理支持国标级联之间共享

648540858 3 years ago
parent
commit
2753e1acf3

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java

@@ -346,7 +346,7 @@ public class ZLMHttpHookListener {
 						if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
 								|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
 								|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
-							zlmMediaListManager.addMedia(item);
+							zlmMediaListManager.addPush(item);
 						}
 					}else {
 						// 兼容流注销时类型错误的问题,等zlm更新后删除

+ 7 - 1
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java

@@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
+import com.genersoft.iot.vmp.service.IStreamProxyService;
 import com.genersoft.iot.vmp.service.IStreamPushService;
 import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -47,6 +48,9 @@ public class ZLMMediaListManager {
     @Autowired
     private IStreamPushService streamPushService;
 
+    @Autowired
+    private IStreamProxyService streamProxyService;
+
     @Autowired
     private StreamPushMapper streamPushMapper;
 
@@ -101,7 +105,7 @@ public class ZLMMediaListManager {
         updateMedia(mediaServerItem, app, streamId);
     }
 
-    public void addMedia(MediaItem mediaItem) {
+    public void addPush(MediaItem mediaItem) {
         // 查找此直播流是否存在redis预设gbId
         StreamPushItem transform = streamPushService.transform(mediaItem);
         // 从streamId取出查询关键值
@@ -179,6 +183,8 @@ public class ZLMMediaListManager {
         return result;
     }
 
+
+
 //    public void clearAllSessions() {
 //        logger.info("清空所有国标相关的session");
 //        JSONObject allSessionJSON = zlmresTfulUtils.getAllSession();

+ 2 - 0
src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java

@@ -2,8 +2,10 @@ package com.genersoft.iot.vmp.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import com.github.pagehelper.PageInfo;
 

+ 21 - 1
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java

@@ -3,15 +3,19 @@ package com.genersoft.iot.vmp.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
 import com.genersoft.iot.vmp.service.IGbStreamService;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.IMediaService;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
 import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
+import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
 import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
 import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper;
 import com.genersoft.iot.vmp.service.IStreamProxyService;
@@ -21,6 +25,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -51,6 +56,9 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
     @Autowired
     private PlatformGbStreamMapper platformGbStreamMapper;
 
+    @Autowired
+    private ParentPlatformMapper parentPlatformMapper;
+
     @Autowired
     private IGbStreamService gbStreamService;
 
@@ -112,7 +120,7 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
         }else {
             result.append("保存失败");
         }
-        if (param.getPlatformGbId() != null && streamLive) {
+        if ( !StringUtils.isEmpty(param.getPlatformGbId()) && streamLive) {
             List<GbStream> gbStreams = new ArrayList<>();
             gbStreams.add(param);
             if (gbStreamService.addPlatformInfo(gbStreams, param.getPlatformGbId())){
@@ -121,6 +129,18 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
                 result.append(",  关联国标平台[ " + param.getPlatformGbId() + " ]失败");
             }
         }
+        // 查找开启了全部直播流共享的上级平台
+        List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
+        if (parentPlatforms.size() > 0) {
+            for (ParentPlatform parentPlatform : parentPlatforms) {
+                param.setPlatformId(parentPlatform.getServerGBId());
+                String stream = param.getStream();
+                StreamProxyItem streamProxyItems = platformGbStreamMapper.selectOne(param.getApp(), stream, parentPlatform.getServerGBId());
+                if (streamProxyItems == null) {
+                    platformGbStreamMapper.add(param);
+                }
+            }
+        }
         wvpResult.setMsg(result.toString());
         return wvpResult;
     }

+ 2 - 0
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java

@@ -514,6 +514,8 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager {
 			logger.error("向数据库添加流代理失败:", e);
 			dataSourceTransactionManager.rollback(transactionStatus);
 		}
+
+
 		return result;
 	}