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

---
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java |   63 +++++++++++++++++++++++++++++--
 1 files changed, 59 insertions(+), 4 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..16dda28 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;
@@ -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,13 @@
         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);
+        } else {
+            mediaServerItem = mediaServerService.getOne(device.getMediaServerId());
         }
         if (mediaServerItem == null) {
             logger.warn("鐐规挱鏃舵湭鎵惧埌鍙娇鐢ㄧ殑ZLM...");
@@ -960,7 +967,7 @@
                         cmder.streamByeCmd(device, ssrcTransaction.getChannelId(),
                                 ssrcTransaction.getStream(), null);
                     } catch (InvalidArgumentException | ParseException | SipException |
-                             SsrcTransactionNotFoundException e) {
+                            SsrcTransactionNotFoundException e) {
                         logger.error("[zlm绂荤嚎]涓烘鍦ㄤ娇鐢ㄦzlm鐨勮澶囷紝 鍙戦�丅YE澶辫触 {}", e.getMessage());
                     }
                 }
@@ -1116,4 +1123,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