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