From a000ed60625ef647d66a186a05bf5bed0e4de127 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 20 三月 2023 14:20:28 +0800
Subject: [PATCH] 完善talk模式

---
 web_src/config/index.js                                                         |    2 +-
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java |    2 +-
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java          |    6 ++++++
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java           |   14 +++++++-------
 web_src/src/components/dialog/devicePlayer.vue                                  |    7 ++++++-
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java   |    4 ++--
 src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java                 |    5 ++++-
 src/main/java/com/genersoft/iot/vmp/service/IPlayService.java                   |    2 +-
 8 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
index 1eca131..dcb2bdd 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
@@ -8,6 +8,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.listener.PatternTopic;
 import org.springframework.data.redis.listener.RedisMessageListenerContainer;
@@ -48,6 +49,8 @@
 
 	@Bean
 	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+		LettuceConnectionFactory lettuceConnectionFactory = (LettuceConnectionFactory) redisConnectionFactory;
+		lettuceConnectionFactory.afterPropertiesSet();
 		RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
 		// 浣跨敤fastJson搴忓垪鍖�
 		FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
@@ -58,7 +61,7 @@
 		// key鐨勫簭鍒楀寲閲囩敤StringRedisSerializer
 		redisTemplate.setKeySerializer(new StringRedisSerializer());
 		redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-		redisTemplate.setConnectionFactory(redisConnectionFactory);
+		redisTemplate.setConnectionFactory(lettuceConnectionFactory);
 		return redisTemplate;
 	}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 79d4789..3b6565a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -641,7 +641,7 @@
             // 杩欓噷涓轰緥閬垮厤涓�涓�氶亾鐨勭偣鎾彧鏈変竴涓猚allID杩欎釜鍙傛暟浣跨敤涓�涓浐瀹氬��
             ResponseEvent responseEvent = (ResponseEvent) e.event;
             SIPResponse response = (SIPResponse) responseEvent.getResponse();
-            streamSession.put(device.getDeviceId(), channelId, "talk", stream, sendRtpItem.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.play);
+            streamSession.put(device.getDeviceId(), channelId, "talk", stream, sendRtpItem.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.talk);
             okEvent.response(e);
         });
     }
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index a59106f..d046fe7 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -249,6 +249,7 @@
             String channelId = ssrcTransactionForAll.get(0).getChannelId();
             DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
             if (deviceChannel != null) {
+
                 result.setEnable_audio(deviceChannel.isHasAudio());
             }
             // 濡傛灉鏄綍鍍忎笅杞藉氨璁剧疆瑙嗛闂撮殧鍗佺
@@ -257,6 +258,11 @@
                 result.setEnable_audio(true);
                 result.setEnable_mp4(true);
             }
+            // 濡傛灉鏄痶alk瀵硅锛屽垯榛樿鑾峰彇澹伴煶
+            if (ssrcTransactionForAll.get(0).getType() == VideoStreamSessionManager.SessionType.talk) {
+                result.setEnable_audio(true);
+            }
+
         }
         return result;
     }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java b/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
index 23c29c7..d9730eb 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
@@ -53,7 +53,7 @@
 
     void zlmServerOnline(String mediaServerId);
 
-    AudioBroadcastResult audioBroadcast(Device device, String channelId);
+    AudioBroadcastResult audioBroadcast(Device device, String channelId, Boolean broadcastMode);
     void stopAudioBroadcast(String deviceId, String channelId);
 
     void audioBroadcastCmd(Device device, String channelId, MediaServerItem mediaServerItem, int timeout, AudioEvent event) throws InvalidArgumentException, ParseException, SipException;
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 1708f6e..d071118 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
@@ -268,7 +268,7 @@
         sendRtpItem.setTcpActive(false);
         sendRtpItem.setTcp(true);
         sendRtpItem.setUsePs(false);
-        sendRtpItem.setReceiveStream(stream);
+        sendRtpItem.setReceiveStream(stream + "_talk");
 
 
         int port = zlmrtpServerFactory.keepPort(mediaServerItem, playSsrc);
@@ -348,7 +348,7 @@
                         sendRtpItem.setCallId(response.getCallIdHeader().getCallId());
                         redisCatchStorage.updateSendRTPSever(sendRtpItem);
 
-                        streamSession.put(device.getDeviceId(), channelId, response.getCallIdHeader().getCallId(),
+                        streamSession.put(device.getDeviceId(), channelId, "talk",
                                 sendRtpItem.getStream(), sendRtpItem.getSsrc(), sendRtpItem.getMediaServerId(),
                                 response, VideoStreamSessionManager.SessionType.talk);
                     } else {
@@ -940,7 +940,7 @@
     }
 
     @Override
-    public AudioBroadcastResult audioBroadcast(Device device, String channelId) {
+    public AudioBroadcastResult audioBroadcast(Device device, String channelId, Boolean broadcastMode) {
         // TODO 蹇呴』澶氱鍙fā寮忔墠鏀寔璇煶鍠婅瘽楣よ闊冲璁�
         if (device == null || channelId == null) {
             return null;
@@ -952,11 +952,11 @@
             return null;
         }
         MediaServerItem mediaServerItem = mediaServerService.getMediaServerForMinimumLoad(null);
-        String app = "broadcast";
-        // TODO 浠巗ip user agent涓垽鏂槸浠�涔堝搧鐗岃澶囷紝澶у崕榛樿浣跨敤talk妯″紡锛屽叾浠栦娇鐢╞roadcast妯″紡
-//        String app = "talk";
+        if (broadcastMode == null) {
+            broadcastMode = true;
+        }
+        String app = broadcastMode?"broadcast":"talk";
         String stream = device.getDeviceId() + "_" + channelId;
-        StreamInfo broadcast = mediaService.getStreamInfoByAppAndStream(mediaServerItem, "broadcast", stream, null, null, null, false);
         AudioBroadcastResult audioBroadcastResult = new AudioBroadcastResult();
         audioBroadcastResult.setApp(app);
         audioBroadcastResult.setStream(stream);
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index c0f64cf..3eba74e 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -249,7 +249,7 @@
 	@Parameter(name = "timeout", description = "鎺ㄦ祦瓒呮椂鏃堕棿(绉�)", required = true)
 	@GetMapping("/broadcast/{deviceId}/{channelId}")
 	@PostMapping("/broadcast/{deviceId}/{channelId}")
-    public AudioBroadcastResult broadcastApi(@PathVariable String deviceId, @PathVariable String channelId, Integer timeout) {
+    public AudioBroadcastResult broadcastApi(@PathVariable String deviceId, @PathVariable String channelId, Integer timeout, Boolean broadcastMode) {
         if (logger.isDebugEnabled()) {
             logger.debug("璇煶骞挎挱API璋冪敤");
         }
@@ -261,7 +261,7 @@
 			throw new ControllerException(ErrorCode.ERROR400.getCode(), "鏈壘鍒伴�氶亾锛� " + channelId);
 		}
 
-		return playService.audioBroadcast(device, channelId);
+		return playService.audioBroadcast(device, channelId, broadcastMode);
 
 	}
 
diff --git a/web_src/config/index.js b/web_src/config/index.js
index fc0aa1f..a04493e 100644
--- a/web_src/config/index.js
+++ b/web_src/config/index.js
@@ -12,7 +12,7 @@
     assetsPublicPath: './',
     proxyTable: {
       '/debug': {
-        target: 'https://default.wvp-pro.cn:18080',
+        target: 'https://default.wvp-pro.cn:18082',
         changeOrigin: true,
         pathRewrite: {
           '^/debug': '/'
diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue
index 78df785..0bc3335 100644
--- a/web_src/src/components/dialog/devicePlayer.vue
+++ b/web_src/src/components/dialog/devicePlayer.vue
@@ -299,6 +299,10 @@
 
           </el-tab-pane>
           <el-tab-pane label="璇煶瀵硅" name="broadcast">
+            <div style="padding: 0 10px">
+              <el-switch v-model="broadcastMode" :disabled="broadcastStatus !== -1" active-color="#409EFF" active-text="鍠婅瘽"
+                         inactive-text="瀵硅"></el-switch>
+            </div>
             <div class="trank" style="text-align: center;">
               <el-button @click="broadcastStatusClick()" :type="getBroadcastStatus()" :disabled="broadcastStatus === -2"
                          circle icon="el-icon-microphone" style="font-size: 32px; padding: 24px;margin-top: 24px;"/>
@@ -390,6 +394,7 @@
       recordStartTime: 0,
       showTimeText: "00:00:00",
       streamInfo: null,
+      broadcastMode: true,
       broadcastRtc: null,
       broadcastStatus: -1, // -2 姝e湪閲婃斁璧勬簮 -1 榛樿鐘舵�� 0 绛夊緟鎺ラ�� 1 鎺ラ�氭垚鍔�
     };
@@ -648,7 +653,7 @@
         // 鍙戣捣璇煶瀵硅
         this.$axios({
           method: 'get',
-          url: '/api/play/broadcast/' + this.deviceId + '/' + this.channelId + "?timeout=30"
+          url: '/api/play/broadcast/' + this.deviceId + '/' + this.channelId + "?timeout=30&broadcastMode=" + this.broadcastMode
         }).then( (res)=> {
           if (res.data.code == 0) {
             let streamInfo = res.data.data.streamInfo;

--
Gitblit v1.8.0