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