From 1553b39b4547418774ab2bd6da72f75bfd14b972 Mon Sep 17 00:00:00 2001
From: 648540858 <456panlinlin>
Date: 星期二, 29 三月 2022 10:04:28 +0800
Subject: [PATCH] 修复级联的国标通道无经纬度问题

---
 src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java |   33 ++++++++++++++++++++++++++++++++-
 1 files changed, 32 insertions(+), 1 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 3e9f28a..6eed17e 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
@@ -30,6 +30,12 @@
 	@Autowired
 	private UserSetup userSetup;
 
+	public enum SessionType {
+		play,
+		playback,
+		download
+	}
+
 	/**
 	 * 娣诲姞涓�涓偣鎾�/鍥炴斁鐨勪簨鍔′俊鎭�
 	 * 鍚庣画鍙互閫氳繃娴両d/callID
@@ -40,7 +46,7 @@
 	 * @param mediaServerId 鎵�浣跨敤鐨勬祦濯掍綋ID
 	 * @param transaction 浜嬪姟
 	 */
-	public void put(String deviceId, String channelId, String callId, String stream, String ssrc, String mediaServerId, ClientTransaction transaction){
+	public void put(String deviceId, String channelId, String callId, String stream, String ssrc, String mediaServerId, ClientTransaction transaction, SessionType type){
 		SsrcTransaction ssrcTransaction = new SsrcTransaction();
 		ssrcTransaction.setDeviceId(deviceId);
 		ssrcTransaction.setChannelId(channelId);
@@ -50,6 +56,7 @@
 		ssrcTransaction.setCallId(callId);
 		ssrcTransaction.setSsrc(ssrc);
 		ssrcTransaction.setMediaServerId(mediaServerId);
+		ssrcTransaction.setType(type);
 
 		redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId()
 				+ "_" +  deviceId + "_" + channelId + "_" + callId + "_" + stream, ssrcTransaction);
@@ -86,6 +93,15 @@
 		return dialog;
 	}
 
+	public SIPDialog getDialogByCallId(String deviceId, String channelId, String callID){
+		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callID, null);
+		if (ssrcTransaction == null) return null;
+		byte[] dialogByteArray = ssrcTransaction.getDialog();
+		if (dialogByteArray == null) return null;
+		SIPDialog dialog = (SIPDialog)SerializeUtils.deSerialize(dialogByteArray);
+		return dialog;
+	}
+
 	public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){
 		if (StringUtils.isEmpty(callId)) callId ="*";
 		if (StringUtils.isEmpty(stream)) stream ="*";
@@ -95,6 +111,21 @@
 		return (SsrcTransaction)redisUtil.get((String) scanResult.get(0));
 	}
 
+	public List<SsrcTransaction> getSsrcTransactionForAll(String deviceId, String channelId, String callId, String stream){
+		if (StringUtils.isEmpty(deviceId)) deviceId ="*";
+		if (StringUtils.isEmpty(channelId)) channelId ="*";
+		if (StringUtils.isEmpty(callId)) callId ="*";
+		if (StringUtils.isEmpty(stream)) stream ="*";
+		String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream;
+		List<Object> scanResult = redisUtil.scan(key);
+		if (scanResult.size() == 0) return null;
+		List<SsrcTransaction> result = new ArrayList<>();
+		for (Object keyObj : scanResult) {
+			result.add((SsrcTransaction)redisUtil.get((String) keyObj));
+		}
+		return result;
+	}
+
 	public String getMediaServerId(String deviceId, String channelId, String stream){
 		SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
 		if (ssrcTransaction == null) return null;

--
Gitblit v1.8.0