From 82fd369ce554467f794c9aa66e453adecefc73a9 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 17 十月 2022 16:56:13 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0'

---
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java |   69 ++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 4d814c6..e24fa63 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -10,20 +10,26 @@
 import javax.sip.SipException;
 
 import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.common.VideoManagerConstants;
 import com.genersoft.iot.vmp.conf.exception.ControllerException;
+import com.genersoft.iot.vmp.conf.exception.ServiceException;
 import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
 import com.genersoft.iot.vmp.service.IDeviceService;
 import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult;
+import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.context.request.async.DeferredResult;
 
 import com.alibaba.fastjson.JSON;
@@ -137,7 +143,7 @@
         String uuid = UUID.randomUUID().toString();
         msg.setId(uuid);
         playResult.setUuid(uuid);
-        DeferredResult<WVPResult<String>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
+        DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
         playResult.setResult(result);
         // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
         resultHolder.put(key, uuid, result);
@@ -157,6 +163,7 @@
                     StreamInfo streamInfoForSuccess = (StreamInfo) wvpResult.getData();
                     MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId());
                     String streamUrl = streamInfoForSuccess.getFmp4();
+
                     // 璇锋眰鎴浘
                     logger.info("[璇锋眰鎴浘]: " + fileName);
                     zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName);
@@ -441,7 +448,6 @@
 
     }
 
-
     @Override
     public void play(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
                      ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
@@ -600,12 +606,11 @@
         if (device == null) {
             return null;
         }
-        String mediaServerId = device.getMediaServerId();
         MediaServerItem mediaServerItem;
-        if (mediaServerId == null) {
+        if (ObjectUtils.isEmpty(device.getMediaServerId()) || "auto".equals(device.getMediaServerId())) {
             mediaServerItem = mediaServerService.getMediaServerForMinimumLoad();
         } else {
-            mediaServerItem = mediaServerService.getOne(mediaServerId);
+            mediaServerItem = mediaServerService.getOne(device.getMediaServerId());
         }
         if (mediaServerItem == null) {
             logger.warn("鐐规挱鏃舵湭鎵惧埌鍙娇鐢ㄧ殑ZLM...");
@@ -960,7 +965,7 @@
                         cmder.streamByeCmd(device, ssrcTransaction.getChannelId(),
                                 ssrcTransaction.getStream(), null);
                     } catch (InvalidArgumentException | ParseException | SipException |
-                             SsrcTransactionNotFoundException e) {
+                            SsrcTransactionNotFoundException e) {
                         logger.error("[zlm绂荤嚎]涓烘鍦ㄤ娇鐢ㄦzlm鐨勮澶囷紝 鍙戦�丅YE澶辫触 {}", e.getMessage());
                     }
                 }
@@ -980,9 +985,9 @@
             return null;
         }
         MediaServerItem mediaServerItem = mediaServerService.getMediaServerForMinimumLoad();
-//        String app = "broadcast";
+        String app = "broadcast";
         // TODO 浠巗ip user agent涓垽鏂槸浠�涔堝搧鐗岃澶囷紝澶у崕榛樿浣跨敤talk妯″紡锛屽叾浠栦娇鐢╞roadcast妯″紡
-        String app = "talk";
+//        String app = "talk";
         String stream = device.getDeviceId() + "_" + channelId;
         StreamInfo broadcast = mediaService.getStreamInfoByAppAndStream(mediaServerItem, "broadcast", stream, null, null, null, false);
         AudioBroadcastResult audioBroadcastResult = new AudioBroadcastResult();
@@ -1116,4 +1121,52 @@
 //            }
 //        }));
     }
+
+    @Override
+    public void pauseRtp(String streamId) throws ServiceException, InvalidArgumentException, ParseException, SipException {
+        String key = redisCatchStorage.queryPlaybackForKey(null, null, streamId, null);
+        StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
+        if (null == streamInfo) {
+            logger.warn("streamId涓嶅瓨鍦�!");
+            throw new ServiceException("streamId涓嶅瓨鍦�");
+        }
+        streamInfo.setPause(true);
+        RedisUtil.set(key, streamInfo);
+        MediaServerItem mediaServerItem = mediaServerService.getOne(streamInfo.getMediaServerId());
+        if (null == mediaServerItem) {
+            logger.warn("mediaServer 涓嶅瓨鍦�!");
+            throw new ServiceException("mediaServer涓嶅瓨鍦�");
+        }
+        // zlm 鏆傚仠RTP瓒呮椂妫�鏌�
+        JSONObject jsonObject = zlmresTfulUtils.pauseRtpCheck(mediaServerItem, streamId);
+        if (jsonObject == null || jsonObject.getInteger("code") != 0) {
+            throw new ServiceException("鏆傚仠RTP鎺ユ敹澶辫触");
+        }
+        Device device = storager.queryVideoDevice(streamInfo.getDeviceID());
+        cmder.playPauseCmd(device, streamInfo);
+    }
+
+    @Override
+    public void resumeRtp(String streamId) throws ServiceException, InvalidArgumentException, ParseException, SipException {
+        String key = redisCatchStorage.queryPlaybackForKey(null, null, streamId, null);
+        StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
+        if (null == streamInfo) {
+            logger.warn("streamId涓嶅瓨鍦�!");
+            throw new ServiceException("streamId涓嶅瓨鍦�");
+        }
+        streamInfo.setPause(false);
+        RedisUtil.set(key, streamInfo);
+        MediaServerItem mediaServerItem = mediaServerService.getOne(streamInfo.getMediaServerId());
+        if (null == mediaServerItem) {
+            logger.warn("mediaServer 涓嶅瓨鍦�!");
+            throw new ServiceException("mediaServer涓嶅瓨鍦�");
+        }
+        // zlm 鏆傚仠RTP瓒呮椂妫�鏌�
+        JSONObject jsonObject = zlmresTfulUtils.resumeRtpCheck(mediaServerItem, streamId);
+        if (jsonObject == null || jsonObject.getInteger("code") != 0) {
+            throw new ServiceException("缁х画RTP鎺ユ敹澶辫触");
+        }
+        Device device = storager.queryVideoDevice(streamInfo.getDeviceID());
+        cmder.playResumeCmd(device, streamInfo);
+    }
 }

--
Gitblit v1.8.0