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/gb28181/session/VideoStreamSessionManager.java |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 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);
 	}
 }

--
Gitblit v1.8.0