From 2b3b7dbc7973def2342eecd8caf7514f0a367c1b Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期五, 16 四月 2021 17:52:30 +0800
Subject: [PATCH] 使用设备Id+通道Id作为session的识别标识,解决点播异常时无法释放session的问题
---
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java | 18 +++--
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 48 +++++++--------
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 13 ++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 5 -
src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java | 24 +++++---
web_src/src/components/channelList.vue | 6 +-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 4
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 4
web_src/src/components/dialog/devicePlayer.vue | 2
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 2
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 31 ++++------
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 2
src/main/resources/application.yml | 2
15 files changed, 87 insertions(+), 78 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
index 65e1e5f..360472f 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
@@ -16,6 +16,7 @@
private ConcurrentHashMap<String, ClientTransaction> sessionMap = new ConcurrentHashMap<>();
private ConcurrentHashMap<String, String> ssrcMap = new ConcurrentHashMap<>();
+ private ConcurrentHashMap<String, String> streamIdMap = new ConcurrentHashMap<>();
public String createPlaySsrc(){
return SsrcUtil.getPlaySsrc();
@@ -25,18 +26,23 @@
return SsrcUtil.getPlayBackSsrc();
}
- public void put(String streamId,String ssrc,ClientTransaction transaction){
- sessionMap.put(streamId, transaction);
- ssrcMap.put(streamId, ssrc);
+ public void put(String deviceId, String channelId ,String ssrc, String streamId, ClientTransaction transaction){
+ sessionMap.put(deviceId + "_" + channelId, transaction);
+ ssrcMap.put(deviceId + "_" + channelId, ssrc);
+ streamIdMap.put(deviceId + "_" + channelId, streamId);
}
- public ClientTransaction get(String streamId){
- return sessionMap.get(streamId);
+ public ClientTransaction getTransaction(String deviceId, String channelId){
+ return sessionMap.get(deviceId + "_" + channelId);
+ }
+
+ public String getStreamId(String deviceId, String channelId){
+ return streamIdMap.get(deviceId + "_" + channelId);
}
- public void remove(String streamId) {
- sessionMap.remove(streamId);
- SsrcUtil.releaseSsrc(ssrcMap.get(streamId));
- ssrcMap.remove(streamId);
+ public void remove(String deviceId, String channelId) {
+ sessionMap.remove(deviceId + "_" + channelId);
+ SsrcUtil.releaseSsrc(ssrcMap.get(deviceId + "_" + channelId));
+ ssrcMap.remove(deviceId + "_" + channelId);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
index dd50e06..4e111d6 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -87,7 +87,6 @@
/**
* 璇锋眰棰勮瑙嗛娴�
- *
* @param device 瑙嗛璁惧
* @param channelId 棰勮閫氶亾
*/
@@ -108,8 +107,8 @@
*
* @param ssrc ssrc
*/
- void streamByeCmd(String ssrc, SipSubscribe.Event okEvent);
- void streamByeCmd(String ssrc);
+ void streamByeCmd(String deviceId, String channelId, SipSubscribe.Event okEvent);
+ void streamByeCmd(String deviceId, String channelId);
/**
* 璇煶骞挎挱
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 84c0898..e0d0bf3 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
@@ -332,17 +332,17 @@
/**
* 璇锋眰棰勮瑙嗛娴�
- * @param device 瑙嗛璁惧
- * @param channelId 棰勮閫氶亾
- * @param event hook璁㈤槄
- * @param errorEvent sip閿欒璁㈤槄
- */
+ * @param device 瑙嗛璁惧
+ * @param channelId 棰勮閫氶亾
+ * @param event hook璁㈤槄
+ * @param errorEvent sip閿欒璁㈤槄
+ */
@Override
public void playStreamCmd(Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent) {
+ String streamId = null;
try {
if (device == null) return;
String ssrc = streamSession.createPlaySsrc();
- String streamId = null;
if (rtpEnable) {
streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId);
}else {
@@ -444,9 +444,12 @@
Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrc, callIdHeader);
- ClientTransaction transaction = transmitRequest(device, request, errorEvent);
- streamSession.put(streamId,ssrc, transaction);
-
+ ClientTransaction transaction = transmitRequest(device, request, (e -> {
+ streamSession.remove(device.getDeviceId(), channelId);
+ errorEvent.response(e);
+ }));
+ streamSession.put(device.getDeviceId(), channelId ,ssrc,streamId, transaction);
+
} catch ( SipException | ParseException | InvalidArgumentException e) {
e.printStackTrace();
}
@@ -552,7 +555,7 @@
Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader);
ClientTransaction transaction = transmitRequest(device, request, errorEvent);
- streamSession.put(streamId, ssrc, transaction);
+ streamSession.put(device.getDeviceId(), channelId, ssrc, streamId, transaction);
} catch ( SipException | ParseException | InvalidArgumentException e) {
e.printStackTrace();
@@ -566,17 +569,17 @@
*
*/
@Override
- public void streamByeCmd(String ssrc) {
- streamByeCmd(ssrc, null);
+ public void streamByeCmd(String deviceId, String channelId) {
+ streamByeCmd(deviceId, channelId, null);
}
@Override
- public void streamByeCmd(String streamId, SipSubscribe.Event okEvent) {
+ public void streamByeCmd(String deviceId, String channelId, SipSubscribe.Event okEvent) {
try {
- ClientTransaction transaction = streamSession.get(streamId);
+ ClientTransaction transaction = streamSession.getTransaction(deviceId, channelId);
// 鏈嶅姟閲嶅惎鍚�
if (transaction == null) {
- StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId);
+ StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
if (streamInfo != null) {
}
@@ -613,14 +616,9 @@
}
dialog.sendRequest(clientTransaction);
-
- streamSession.remove(streamId);
- zlmrtpServerFactory.closeRTPServer(streamId);
- } catch (TransactionDoesNotExistException e) {
- e.printStackTrace();
- } catch (SipException e) {
- e.printStackTrace();
- } catch (ParseException e) {
+ zlmrtpServerFactory.closeRTPServer(streamSession.getStreamId(deviceId, channelId));
+ streamSession.remove(deviceId, channelId);
+ } catch (SipException | ParseException e) {
e.printStackTrace();
}
}
@@ -641,7 +639,6 @@
* 璇煶骞挎挱
*
* @param device 瑙嗛璁惧
- * @param channelId 棰勮閫氶亾
*/
@Override
public boolean audioBroadcastCmd(Device device) {
@@ -1140,7 +1137,7 @@
* @param device 瑙嗛璁惧
* @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
* @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
- * @param alarmMethods 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmMethod 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
* @param alarmType 鎶ヨ绫诲瀷
* @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
* @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
@@ -1428,5 +1425,6 @@
String streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId);
zlmrtpServerFactory.closeRTPServer(streamId);
}
+ streamSession.remove(device.getDeviceId(), channelId);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
index ec5f921..ec136e9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
@@ -58,7 +58,7 @@
redisCatchStorage.deleteSendRTPServer(platformGbId, channelId);
if (zlmrtpServerFactory.totalReaderCount(sendRtpItem.getApp(), streamId) == 0) {
System.out.println(streamId + "鏃犲叾瀹冭鐪嬭�咃紝閫氱煡璁惧鍋滄鎺ㄦ祦");
- cmder.streamByeCmd(streamId);
+ cmder.streamByeCmd(sendRtpItem.getDeviceId(), channelId);
}
}
} catch (SipException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index 6341fb2..6306a98 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -922,7 +922,7 @@
StreamInfo streamInfo = redisCatchStorage.queryPlaybackByDevice(deviceId, "*");
if (streamInfo != null) {
redisCatchStorage.stopPlayback(streamInfo);
- cmder.streamByeCmd(streamInfo.getStreamId());
+ cmder.streamByeCmd(streamInfo.getDeviceID(), streamInfo.getChannelId());
}
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException 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 2a76f26..183a544 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
@@ -306,12 +306,12 @@
if (redisCatchStorage.isChannelSendingRTP(streamInfo.getChannelId())) {
ret.put("close", false);
} else {
- cmder.streamByeCmd(streamId);
+ cmder.streamByeCmd(streamInfo.getDeviceID(), streamInfo.getChannelId());
redisCatchStorage.stopPlay(streamInfo);
storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
}
}else{
- cmder.streamByeCmd(streamId);
+ cmder.streamByeCmd(streamInfo.getDeviceID(), streamInfo.getChannelId());
streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId);
redisCatchStorage.stopPlayback(streamInfo);
}
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 f2579cd..b4076d0 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
@@ -63,7 +63,16 @@
playResult.setResult(result);
// 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid, result);
-
+ // 瓒呮椂澶勭悊
+ result.onTimeout(()->{
+ logger.warn(String.format("璁惧鐐规挱瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId));
+ // 閲婃斁rtpserver
+ cmder.closeRTPServer(playResult.getDevice(), channelId);
+ RequestMessage msg = new RequestMessage();
+ msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + playResult.getUuid());
+ msg.setData("Timeout");
+ resultHolder.invokeResult(msg);
+ });
if (streamInfo == null) {
// 鍙戦�佺偣鎾秷鎭�
cmder.playStreamCmd(device, channelId, (JSONObject response) -> {
@@ -76,6 +85,7 @@
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
Response response = event.getResponse();
+ cmder.closeRTPServer(playResult.getDevice(), channelId);
msg.setData(String.format("鐐规挱澶辫触锛� 閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase()));
resultHolder.invokeResult(msg);
if (errorEvent != null) {
@@ -107,6 +117,7 @@
logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + response.toJSONString());
onPublishHandlerForPlay(response, deviceId, channelId, uuid.toString());
}, event -> {
+ cmder.closeRTPServer(playResult.getDevice(), channelId);
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
Response response = event.getResponse();
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
index d0d07f7..8b2c2bf 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -36,7 +36,7 @@
StreamInfo queryPlaybackByStreamId(String steamId);
- StreamInfo queryPlayByDevice(String deviceId, String code);
+ StreamInfo queryPlayByDevice(String deviceId, String channelId);
/**
* 鏇存柊娴佸獟浣撲俊鎭�
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
index 3417acf..98795ef 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -75,11 +75,11 @@
}
@Override
- public StreamInfo queryPlayByDevice(String deviceId, String code) {
+ public StreamInfo queryPlayByDevice(String deviceId, String channelId) {
// List<Object> playLeys = redis.keys(String.format("%S_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
List<Object> playLeys = redis.scan(String.format("%S_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
deviceId,
- code));
+ channelId));
if (playLeys == null || playLeys.size() == 0) return null;
return (StreamInfo)redis.get(playLeys.get(0).toString());
}
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 18f1a74..f9b6a35 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
@@ -75,27 +75,19 @@
PlayResult playResult = playService.play(deviceId, channelId, null, null);
- // 瓒呮椂澶勭悊
- playResult.getResult().onTimeout(()->{
- logger.warn(String.format("璁惧鐐规挱瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId));
- // 閲婃斁rtpserver
- cmder.closeRTPServer(playResult.getDevice(), channelId);
- RequestMessage msg = new RequestMessage();
- msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + playResult.getUuid());
- msg.setData("Timeout");
- resultHolder.invokeResult(msg);
- });
+
return playResult.getResult();
}
@ApiOperation("鍋滄鐐规挱")
@ApiImplicitParams({
- @ApiImplicitParam(name = "streamId", value = "瑙嗛娴両D", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "deviceId", value = "璁惧ID", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "channelId", value = "閫氶亾ID", dataTypeClass = String.class),
})
- @GetMapping("/stop/{streamId}")
- public DeferredResult<ResponseEntity<String>> playStop(@PathVariable String streamId) {
+ @GetMapping("/stop/{deviceId}/{channelId}")
+ public DeferredResult<ResponseEntity<String>> playStop(@PathVariable String deviceId, @PathVariable String channelId) {
- logger.debug(String.format("璁惧棰勮/鍥炴斁鍋滄API璋冪敤锛宻treamId锛�%s", streamId));
+ logger.debug(String.format("璁惧棰勮/鍥炴斁鍋滄API璋冪敤锛宻treamId锛�%s/$s", deviceId, channelId ));
UUID uuid = UUID.randomUUID();
DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>();
@@ -103,8 +95,8 @@
// 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
resultHolder.put(DeferredResultHolder.CALLBACK_CMD_STOP + uuid, result);
- cmder.streamByeCmd(streamId, event -> {
- StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId);
+ cmder.streamByeCmd(deviceId, channelId, event -> {
+ StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
if (streamInfo == null) {
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
@@ -121,9 +113,10 @@
}
});
- if (streamId != null) {
+ if (deviceId != null || channelId != null) {
JSONObject json = new JSONObject();
- json.put("streamId", streamId);
+ json.put("deviceId", deviceId);
+ json.put("channelId", channelId);
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
msg.setData(json.toString());
@@ -138,7 +131,7 @@
// 瓒呮椂澶勭悊
result.onTimeout(()->{
- logger.warn(String.format("璁惧棰勮/鍥炴斁鍋滄瓒呮椂锛宻treamId锛�%s ", streamId));
+ logger.warn(String.format("璁惧棰勮/鍥炴斁鍋滄瓒呮椂锛宒eviceId/channelId锛�%s/$s ", deviceId, channelId));
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_STOP + uuid);
msg.setData("Timeout");
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
index daa5557..11c210e 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
@@ -84,7 +84,7 @@
StreamInfo streamInfo = redisCatchStorage.queryPlaybackByDevice(deviceId, channelId);
if (streamInfo != null) {
// 鍋滄涔嬪墠鐨勫洖鏀�
- cmder.streamByeCmd(streamInfo.getStreamId());
+ cmder.streamByeCmd(deviceId, channelId);
}
resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid, result);
cmder.playbackStreamCmd(device, channelId, startTime, endTime, (JSONObject response) -> {
@@ -103,20 +103,22 @@
@ApiOperation("鍋滄瑙嗛鍥炴斁")
@ApiImplicitParams({
- @ApiImplicitParam(name = "ssrc", value = "瑙嗛娴佹爣璇�", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "deviceId", value = "璁惧ID", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "channelId", value = "閫氶亾ID", dataTypeClass = String.class),
})
- @GetMapping("/stop/{ssrc}")
- public ResponseEntity<String> playStop(@PathVariable String ssrc) {
+ @GetMapping("/stop/{deviceId}/{channelId}")
+ public ResponseEntity<String> playStop(@PathVariable String deviceId, @PathVariable String channelId) {
- cmder.streamByeCmd(ssrc);
+ cmder.streamByeCmd(deviceId, channelId);
if (logger.isDebugEnabled()) {
- logger.debug(String.format("璁惧褰曞儚鍥炴斁鍋滄 API璋冪敤锛宻src锛�%s", ssrc));
+ logger.debug(String.format("璁惧褰曞儚鍥炴斁鍋滄 API璋冪敤锛宒eviceId/channelId锛�%s/%s", deviceId, channelId));
}
- if (ssrc != null) {
+ if (deviceId != null && channelId != null) {
JSONObject json = new JSONObject();
- json.put("ssrc", ssrc);
+ json.put("deviceId", deviceId);
+ json.put("channelId", channelId);
return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
} else {
logger.warn("璁惧褰曞儚鍥炴斁鍋滄API璋冪敤澶辫触锛�");
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
index bc505ef..932684a 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
@@ -163,7 +163,7 @@
result.put("error","鏈壘鍒版祦淇℃伅");
return result;
}
- cmder.streamByeCmd(streamInfo.getStreamId());
+ cmder.streamByeCmd(serial, code);
redisCatchStorage.stopPlay(streamInfo);
storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
return null;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index caf4dfc..ef46c2a 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,3 +1,3 @@
spring:
profiles:
- active: dev
\ No newline at end of file
+ active: local
\ No newline at end of file
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index 89fe0ae..7dbed08 100644
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -216,12 +216,12 @@
var that = this;
this.$axios({
method: 'get',
- url: '/api/play/stop/' + itemData.streamId
+ url: '/api/play/stop/' + this.deviceId + "/" + itemData.channelId
}).then(function (res) {
console.log(JSON.stringify(res));
that.initData();
}).catch(function (error) {
- if (error.response.status == 402) { // 宸茬粡鍋滄杩�
+ if (error.response.status === 402) { // 宸茬粡鍋滄杩�
that.initData();
}else {
console.log(error)
@@ -253,7 +253,7 @@
this.$axios({
method: 'get',
- url:`/api/device/query/sub_channels/${this.deviceId}/${this.parentChannelId}/channels`,
+ url:`/api/device/query/sub_channels/${this.deviceId}/${this.parentChannelId}/channels`,
params: {
page: that.currentPage,
count: that.count,
diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue
index f5c7d50..6d91da9 100644
--- a/web_src/src/components/dialog/devicePlayer.vue
+++ b/web_src/src/components/dialog/devicePlayer.vue
@@ -415,7 +415,7 @@
this.videoUrl = '';
this.$axios({
method: 'get',
- url: '/api/playback/stop/' + this.streamId
+ url: '/api/playback/stop/' + this.deviceId + "/" + this.channelId
}).then(function (res) {
if (callback) callback()
});
--
Gitblit v1.8.0