From 720231d33f387c6d1bf13bdef653314c5c450809 Mon Sep 17 00:00:00 2001
From: 648540858 <18010473990@163.com>
Date: 星期六, 25 九月 2021 22:12:15 +0800
Subject: [PATCH] 添加发送媒体流, 添加媒体服务器节点管理ui,修复修改密码

---
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java |  166 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 143 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
index 33c0051..18c1b93 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -1,5 +1,6 @@
 package com.genersoft.iot.vmp.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.common.VideoManagerConstants;
@@ -14,10 +15,11 @@
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.MediaServerMapper;
 import com.genersoft.iot.vmp.utils.redis.JedisUtil;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
+import okhttp3.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,9 +59,6 @@
     private MediaServerMapper mediaServerMapper;
 
     @Autowired
-    private IRedisCatchStorage redisCatchStorage;
-
-    @Autowired
     private VideoStreamSessionManager streamSession;
 
     @Autowired
@@ -97,7 +96,9 @@
 
     @Override
     public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId) {
-        if (mediaServerItem == null || mediaServerItem.getId() == null) return null;
+        if (mediaServerItem == null || mediaServerItem.getId() == null) {
+            return null;
+        }
         // 鑾峰彇mediaServer鍙敤鐨剆src
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId();
 
@@ -107,7 +108,9 @@
             return null;
         }else {
             String ssrc = ssrcConfig.getPlaySsrc();
-            if (streamId == null) streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
+            if (streamId == null) {
+                streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
+            }
             int rtpServerPort = mediaServerItem.getRtpProxyPort();
             if (mediaServerItem.isRtpEnable()) {
                 rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId);
@@ -131,7 +134,9 @@
 
     @Override
     public void releaseSsrc(MediaServerItem mediaServerItem, String ssrc) {
-        if (mediaServerItem == null || ssrc == null) return;
+        if (mediaServerItem == null || ssrc == null) {
+            return;
+        }
         SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig();
         ssrcConfig.releaseSsrc(ssrc);
         mediaServerItem.setSsrcConfig(ssrcConfig);
@@ -141,7 +146,6 @@
 
     /**
      * zlm 閲嶅惎鍚庨噸缃粬鐨勬帹娴佷俊鎭紝 TODO 缁欐鍦ㄤ娇鐢ㄧ殑璁惧鍙戦�佸仠姝㈠懡浠�
-     * @param mediaServerItem
      */
     @Override
     public void clearRTPServer(MediaServerItem mediaServerItem) {
@@ -174,9 +178,15 @@
     public List<MediaServerItem> getAll() {
         List<MediaServerItem> result = new ArrayList<>();
         List<Object> mediaServerKeys = redisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX));
-        for (int i = 0; i < mediaServerKeys.size(); i++) {
-            String key = (String) mediaServerKeys.get(i);
-            result.add((MediaServerItem)redisUtil.get(key));
+        String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX;
+        for (Object mediaServerKey : mediaServerKeys) {
+            String key = (String) mediaServerKey;
+            MediaServerItem mediaServerItem = (MediaServerItem) redisUtil.get(key);
+            // 妫�鏌ョ姸鎬�
+            if (redisUtil.zScore(onlineKey, mediaServerItem.getId()) != null) {
+                mediaServerItem.setStatus(true);
+            }
+            result.add(mediaServerItem);
         }
         return result;
     }
@@ -208,7 +218,9 @@
      */
     @Override
     public MediaServerItem getOne(String mediaServerId) {
-        if (mediaServerId == null) return null;
+        if (mediaServerId == null) {
+            return null;
+        }
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerId;
         return (MediaServerItem)redisUtil.get(key);
     }
@@ -225,8 +237,34 @@
     }
 
     @Override
-    public void add(MediaServerItem mediaSerItem) {
-        mediaServerMapper.add(mediaSerItem);
+    public WVPResult<String> add(MediaServerItem mediaServerItem) {
+        WVPResult<String> result = new WVPResult<>();
+        mediaServerItem.setCreateTime(this.format.format(System.currentTimeMillis()));
+        mediaServerItem.setUpdateTime(this.format.format(System.currentTimeMillis()));
+        JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
+        if (responseJSON != null) {
+            JSONArray data = responseJSON.getJSONArray("data");
+            if (data != null && data.size() > 0) {
+                ZLMServerConfig zlmServerConfig= JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
+                if (mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId()) != null) {
+                    result.setCode(-1);
+                    result.setMsg("淇濆瓨澶辫触锛屽獟浣撴湇鍔D [ " + zlmServerConfig.getGeneralMediaServerId() + " ] 宸插瓨鍦紝璇蜂慨鏀瑰獟浣撴湇鍔″櫒閰嶇疆");
+                    return result;
+                }
+                zlmServerConfig.setIp(mediaServerItem.getIp());
+                handLeZLMServerConfig(zlmServerConfig);
+                result.setCode(0);
+                result.setMsg("success");
+            }else {
+                result.setCode(-1);
+                result.setMsg("杩炴帴澶辫触");
+            }
+
+        }else {
+            result.setCode(-1);
+            result.setMsg("杩炴帴澶辫触");
+        }
+       return result;
     }
 
     /**
@@ -249,13 +287,27 @@
             // docker閮ㄧ讲涓嶄細浣跨敤zlm閰嶇疆鐨勭鍙e彿涓嶆槸榛樿鐨勫垯涓嶅仛鏇存柊锛� 閰嶇疆淇敼闇�瑕佽嚜琛屼慨鏀箂erver閰嶇疆;
             MediaServerItem serverItemFromConfig = mediaConfig.getMediaSerItem();
             serverItemFromConfig.setId(zlmServerConfig.getGeneralMediaServerId());
-            if (mediaConfig.getHttpPort() == 0) serverItemFromConfig.setHttpPort(zlmServerConfig.getHttpPort());
-            if (mediaConfig.getHttpSSlPort() == 0) serverItemFromConfig.setHttpSSlPort(zlmServerConfig.getHttpSSLport());
-            if (mediaConfig.getRtmpPort() == 0) serverItemFromConfig.setRtmpPort(zlmServerConfig.getRtmpPort());
-            if (mediaConfig.getRtmpSSlPort() == 0) serverItemFromConfig.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort());
-            if (mediaConfig.getRtspPort() == 0) serverItemFromConfig.setRtspPort(zlmServerConfig.getRtspPort());
-            if (mediaConfig.getRtspSSLPort() == 0) serverItemFromConfig.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
-            if (mediaConfig.getRtpProxyPort() == 0) serverItemFromConfig.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
+            if (mediaConfig.getHttpPort() == 0) {
+                serverItemFromConfig.setHttpPort(zlmServerConfig.getHttpPort());
+            }
+            if (mediaConfig.getHttpSSlPort() == 0) {
+                serverItemFromConfig.setHttpSSlPort(zlmServerConfig.getHttpSSLport());
+            }
+            if (mediaConfig.getRtmpPort() == 0) {
+                serverItemFromConfig.setRtmpPort(zlmServerConfig.getRtmpPort());
+            }
+            if (mediaConfig.getRtmpSSlPort() == 0) {
+                serverItemFromConfig.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort());
+            }
+            if (mediaConfig.getRtspPort() == 0) {
+                serverItemFromConfig.setRtspPort(zlmServerConfig.getRtspPort());
+            }
+            if (mediaConfig.getRtspSSLPort() == 0) {
+                serverItemFromConfig.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
+            }
+            if (mediaConfig.getRtpProxyPort() == 0) {
+                serverItemFromConfig.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
+            }
             if (serverItem != null){
                 mediaServerMapper.delDefault();
                 mediaServerMapper.add(serverItemFromConfig);
@@ -319,9 +371,10 @@
 
     @Override
     public void addCount(String mediaServerId) {
-        if (mediaServerId == null) return;
+        if (mediaServerId == null) {
+            return;
+        }
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX;
-        Double aDouble = redisUtil.zScore(key, mediaServerId);
         redisUtil.zIncrScore(key, mediaServerId, 1);
 
     }
@@ -399,4 +452,71 @@
     }
 
 
+    @Override
+    public WVPResult<MediaServerItem> checkMediaServer(String ip, int port, String secret) {
+        WVPResult<MediaServerItem> result = new WVPResult<>();
+        if (mediaServerMapper.queryOneByHostAndPort(ip, port) != null) {
+            result.setCode(-1);
+            result.setMsg("姝よ繛鎺ュ凡瀛樺湪");
+            return result;
+        }
+        MediaServerItem mediaServerItem = new MediaServerItem();
+        mediaServerItem.setIp(ip);
+        mediaServerItem.setHttpPort(port);
+        mediaServerItem.setSecret(secret);
+        JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
+        if (responseJSON == null) {
+            result.setCode(-1);
+            result.setMsg("杩炴帴澶辫触");
+            return result;
+        }
+        JSONArray data = responseJSON.getJSONArray("data");
+        ZLMServerConfig zlmServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
+        if (zlmServerConfig == null) {
+            result.setCode(-1);
+            result.setMsg("璇诲彇閰嶇疆澶辫触");
+            return result;
+        }
+        if (mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId()) != null) {
+            result.setCode(-1);
+            result.setMsg("濯掍綋鏈嶅姟ID [" + zlmServerConfig.getGeneralMediaServerId() + " ] 宸插瓨鍦紝璇蜂慨鏀瑰獟浣撴湇鍔″櫒閰嶇疆");
+            return result;
+        }
+        mediaServerItem.setHttpSSlPort(zlmServerConfig.getHttpPort());
+        mediaServerItem.setRtmpPort(zlmServerConfig.getRtmpPort());
+        mediaServerItem.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort());
+        mediaServerItem.setRtspPort(zlmServerConfig.getRtspPort());
+        mediaServerItem.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
+        mediaServerItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
+        mediaServerItem.setStreamIp(ip);
+        mediaServerItem.setHookIp(sipConfig.getIp());
+        mediaServerItem.setSdpIp(ip);
+        mediaServerItem.setStreamNoneReaderDelayMS(zlmServerConfig.getGeneralStreamNoneReaderDelayMS());
+        result.setCode(0);
+        result.setMsg("鎴愬姛");
+        result.setData(mediaServerItem);
+        return result;
+    }
+
+    @Override
+    public boolean checkMediaRecordServer(String ip, int port) {
+        boolean result = false;
+        OkHttpClient client = new OkHttpClient();
+        String url = String.format("http://%s:%s/index/api/record",  ip, port);
+
+        FormBody.Builder builder = new FormBody.Builder();
+
+        Request request = new Request.Builder()
+                .get()
+                .url(url)
+                .build();
+        try {
+            Response response = client.newCall(request).execute();
+            if (response != null) {
+                result = true;
+            }
+        } catch (Exception e) {}
+
+        return result;
+    }
 }

--
Gitblit v1.8.0