From 74714711aa87dcd1259f5aebe55d362be732ffa2 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 18 十月 2022 17:35:42 +0800
Subject: [PATCH] 优化sip消息构建,去除ServerTransaction的使用
---
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 80 +++++++++++++++++++++++++++++++---------
1 files changed, 62 insertions(+), 18 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 579184c..a6b9cc5 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -23,8 +23,12 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.support.incrementer.AbstractIdentityColumnMaxValueIncrementer;
import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
+import javax.sip.InvalidArgumentException;
+import javax.sip.SipException;
+import java.text.ParseException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
@@ -86,19 +90,39 @@
redisCatchStorage.clearCatchByDeviceId(device.getDeviceId());
}
device.setUpdateTime(now);
- device.setOnline(1);
- // 绗竴娆′笂绾�
+ // 绗竴娆′笂绾� 鎴栧垯璁惧涔嬪墠鏄绾跨姸鎬�--杩涜閫氶亾鍚屾鍜岃澶囦俊鎭煡璇�
if (device.getCreateTime() == null) {
+ device.setOnline(1);
device.setCreateTime(now);
logger.info("[璁惧涓婄嚎,棣栨娉ㄥ唽]: {}锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
deviceMapper.add(device);
redisCatchStorage.updateDevice(device);
- commander.deviceInfoQuery(device);
+ try {
+ commander.deviceInfoQuery(device);
+ } catch (InvalidArgumentException | SipException | ParseException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鏌ヨ璁惧淇℃伅: {}", e.getMessage());
+ }
sync(device);
}else {
- deviceMapper.update(device);
- redisCatchStorage.updateDevice(device);
+ if(device.getOnline() == 0){
+ device.setOnline(1);
+ device.setCreateTime(now);
+ logger.info("[璁惧涓婄嚎,绂荤嚎鐘舵�佷笅閲嶆柊娉ㄥ唽]: {}锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
+ deviceMapper.update(device);
+ redisCatchStorage.updateDevice(device);
+ try {
+ commander.deviceInfoQuery(device);
+ } catch (InvalidArgumentException | SipException | ParseException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鏌ヨ璁惧淇℃伅: {}", e.getMessage());
+ }
+ sync(device);
+ // TODO 濡傛灉璁惧涓嬬殑閫氶亾绾ц仈鍒颁簡鍏朵粬骞冲彴锛岄偅涔堥渶瑕佸彂閫佷簨浠舵垨鑰卬otify缁欎笂绾у钩鍙�
+ }else {
+ deviceMapper.update(device);
+ redisCatchStorage.updateDevice(device);
+ }
+
}
// 涓婄嚎娣诲姞璁㈤槄
@@ -116,6 +140,7 @@
@Override
public void offline(String deviceId) {
+ logger.info("[璁惧绂荤嚎]锛� device锛歿}", deviceId);
Device device = deviceMapper.getDeviceByDeviceId(deviceId);
if (device == null) {
return;
@@ -125,12 +150,14 @@
device.setOnline(0);
redisCatchStorage.updateDevice(device);
deviceMapper.update(device);
+ //杩涜閫氶亾绂荤嚎
+ deviceChannelMapper.offlineByDeviceId(deviceId);
// 绂荤嚎閲婃斁鎵�鏈塻src
List<SsrcTransaction> ssrcTransactions = streamSession.getSsrcTransactionForAll(deviceId, null, null, null);
if (ssrcTransactions != null && ssrcTransactions.size() > 0) {
for (SsrcTransaction ssrcTransaction : ssrcTransactions) {
mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
- mediaServerService.closeRTPServer(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
+ mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream());
streamSession.remove(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
}
}
@@ -147,7 +174,7 @@
logger.info("[娣诲姞鐩綍璁㈤槄] 璁惧{}", device.getDeviceId());
// 娣诲姞鐩綍璁㈤槄
CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander, dynamicTask);
- // 鎻愬墠寮�濮嬪埛鏂拌闃�
+ // 鍒锋柊璁㈤槄
int subscribeCycleForCatalog = Math.max(device.getSubscribeCycleForCatalog(),30);
// 璁剧疆鏈�灏忓�间负30
dynamicTask.startCron(device.getDeviceId() + "catalog", catalogSubscribeTask, (subscribeCycleForCatalog -1) * 1000);
@@ -182,8 +209,8 @@
MobilePositionSubscribeTask mobilePositionSubscribeTask = new MobilePositionSubscribeTask(device, sipCommander, dynamicTask);
// 璁剧疆鏈�灏忓�间负30
int subscribeCycleForCatalog = Math.max(device.getSubscribeCycleForMobilePosition(),30);
- // 鎻愬墠寮�濮嬪埛鏂拌闃�
- dynamicTask.startCron(device.getDeviceId() + "mobile_position" , mobilePositionSubscribeTask, (subscribeCycleForCatalog -1 ) * 1000);
+ // 鍒锋柊璁㈤槄
+ dynamicTask.startCron(device.getDeviceId() + "mobile_position" , mobilePositionSubscribeTask, (subscribeCycleForCatalog) * 1000);
return true;
}
@@ -223,15 +250,28 @@
}
int sn = (int)((Math.random()*9+1)*100000);
catalogResponseMessageHandler.setChannelSyncReady(device, sn);
- sipCommander.catalogQuery(device, sn, event -> {
- String errorMsg = String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg);
+ try {
+ sipCommander.catalogQuery(device, sn, event -> {
+ String errorMsg = String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg);
+ catalogResponseMessageHandler.setChannelSyncEnd(device.getDeviceId(), errorMsg);
+ });
+ } catch (SipException | InvalidArgumentException | ParseException e) {
+ logger.error("[鍚屾閫氶亾], 淇′护鍙戦�佸け璐ワ細{}", e.getMessage() );
+ String errorMsg = String.format("鍚屾閫氶亾澶辫触锛屼俊浠ゅ彂閫佸け璐ワ細 %s", e.getMessage());
catalogResponseMessageHandler.setChannelSyncEnd(device.getDeviceId(), errorMsg);
- });
+ }
}
@Override
public Device queryDevice(String deviceId) {
- return deviceMapper.getDeviceByDeviceId(deviceId);
+ Device device = redisCatchStorage.getDevice(deviceId);
+ if (device == null) {
+ device = deviceMapper.getDeviceByDeviceId(deviceId);
+ if (device != null) {
+ redisCatchStorage.updateDevice(device);
+ }
+ }
+ return device;
}
@Override
@@ -251,7 +291,11 @@
if (device == null || device.getOnline() == 0) {
return;
}
- sipCommander.deviceStatusQuery(device, null);
+ try {
+ sipCommander.deviceStatusQuery(device, null);
+ } catch (InvalidArgumentException | SipException | ParseException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 璁惧鐘舵�佹煡璇�: {}", e.getMessage());
+ }
}
@@ -268,13 +312,13 @@
logger.warn("鏇存柊璁惧鏃舵湭鎵惧埌璁惧淇℃伅");
return;
}
- if (!StringUtils.isEmpty(device.getName())) {
+ if (!ObjectUtils.isEmpty(device.getName())) {
deviceInStore.setName(device.getName());
}
- if (!StringUtils.isEmpty(device.getCharset())) {
+ if (!ObjectUtils.isEmpty(device.getCharset())) {
deviceInStore.setCharset(device.getCharset());
}
- if (!StringUtils.isEmpty(device.getMediaServerId())) {
+ if (!ObjectUtils.isEmpty(device.getMediaServerId())) {
deviceInStore.setMediaServerId(device.getMediaServerId());
}
@@ -316,7 +360,7 @@
device.setUpdateTime(now);
device.setCharset(device.getCharset().toUpperCase());
device.setUpdateTime(DateUtil.getNow());
- if (deviceMapper.update(device) > 0) {
+ if (deviceMapper.updateCustom(device) > 0) {
redisCatchStorage.updateDevice(device);
}
--
Gitblit v1.8.0