README.md
@@ -134,10 +134,10 @@ 感谢作者[dexter langhuihui](https://github.com/langhuihui) 开源这么好用的WEB播放器。 感谢作者[Kyle](https://gitee.com/kkkkk5G) 开源了好用的前端页面 感谢各位大佬的赞助以及对项目的指正与帮助。包括但不限于代码贡献、问题反馈、资金捐赠等各种方式的支持!以下排名不分先后: [lawrencehj](https://github.com/lawrencehj) @陆丰-创奇科技 [swwhaha](https://github.com/swwheihei) [lawrencehj](https://github.com/lawrencehj) [Smallwhitepig](https://github.com/Smallwhitepig) [swwhaha](https://github.com/swwheihei) [hotcoffie](https://github.com/hotcoffie) [xiaomu](https://github.com/nikmu) [TristingChen](https://github.com/TristingChen) [chenparty](https://github.com/chenparty) [Hotleave](https://github.com/hotleave) [ydwxb](https://github.com/ydwxb) [ydpd](https://github.com/ydpd) [szy833](https://github.com/szy833) [ydwxb](https://github.com/ydwxb) [ydpd](https://github.com/ydpd) [szy833](https://github.com/szy833) [ydwxb](https://github.com/ydwxb) [Albertzhu666](https://github.com/Albertzhu666) ps: 刚增加了这个名单,肯定遗漏了一些大佬,欢迎大佬联系我添加。 bootstrap.sh
New file @@ -0,0 +1,91 @@ #!/bin/bash ###################################################### # Copyright 2019 Pham Ngoc Hoai # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Repo: https://github.com/tyrion9/spring-boot-startup-script # ######### PARAM ###################################### JAVA_OPT=-Xmx1024m JARFILE=`ls -1r *.jar 2>/dev/null | head -n 1` PID_FILE=pid.file RUNNING=N PWD=`pwd` ######### DO NOT MODIFY ######## if [ -f $PID_FILE ]; then PID=`cat $PID_FILE` if [ ! -z "$PID" ] && kill -0 $PID 2>/dev/null; then RUNNING=Y fi fi start() { if [ $RUNNING == "Y" ]; then echo "Application already started" else if [ -z "$JARFILE" ] then echo "ERROR: jar file not found" else nohup java $JAVA_OPT -Djava.security.egd=file:/dev/./urandom -jar $PWD/$JARFILE > nohup.out 2>&1 & echo $! > $PID_FILE echo "Application $JARFILE starting..." tail -f nohup.out fi fi } stop() { if [ $RUNNING == "Y" ]; then kill -9 $PID rm -f $PID_FILE echo "Application stopped" else echo "Application not running" fi } restart() { stop start } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') restart ;; *) echo "Usage: $0 { start | stop | restart }" exit 1 ;; esac exit 0 pom.xml
@@ -11,7 +11,7 @@ <groupId>com.genersoft</groupId> <artifactId>wvp-pro</artifactId> <version>2.0.2</version> <version>2.1.1</version> <name>web video platform</name> <description>国标28181视频平台</description> sql/clean.sql
New file @@ -0,0 +1,13 @@ delete from device; delete from device_alarm; delete from device_channel; delete from device_mobile_position; delete from gb_stream; delete from log; delete from media_server; delete from parent_platform; delete from platform_catalog; delete from platform_gb_channel; delete from platform_gb_stream; delete from stream_proxy; delete from stream_push; sql/mysql.sql
@@ -1,13 +1,13 @@ -- MySQL dump 10.13 Distrib 8.0.28, for Linux (x86_64) -- MariaDB dump 10.19 Distrib 10.7.3-MariaDB, for Linux (x86_64) -- -- Host: 127.0.0.1 Database: wvp -- Host: 127.0.0.1 Database: wvp3 -- ------------------------------------------------------ -- Server version 8.0.28-0ubuntu0.20.04.3 -- Server version 8.0.0-dmr /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8mb4 */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; @@ -21,33 +21,34 @@ DROP TABLE IF EXISTS `device`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `device` ( `id` int NOT NULL AUTO_INCREMENT, `deviceId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `manufacturer` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `model` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `firmware` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `transport` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `streamMode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `online` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `registerTime` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `keepaliveTime` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `ip` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `updateTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `port` int NOT NULL, `expires` int NOT NULL, `subscribeCycleForCatalog` int NOT NULL, `subscribeCycleForMobilePosition` int NOT NULL, `mobilePositionSubmissionInterval` int DEFAULT 5 NOT NULL, `subscribeCycleForAlarm` int NOT NULL, `hostAddress` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `charset` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `deviceId` varchar(50) NOT NULL, `name` varchar(255) DEFAULT NULL, `manufacturer` varchar(255) DEFAULT NULL, `model` varchar(255) DEFAULT NULL, `firmware` varchar(255) DEFAULT NULL, `transport` varchar(50) DEFAULT NULL, `streamMode` varchar(50) DEFAULT NULL, `online` varchar(50) DEFAULT NULL, `registerTime` varchar(50) DEFAULT NULL, `keepaliveTime` varchar(50) DEFAULT NULL, `ip` varchar(50) NOT NULL, `createTime` varchar(50) NOT NULL, `updateTime` varchar(50) NOT NULL, `port` int(11) NOT NULL, `expires` int(11) NOT NULL, `subscribeCycleForCatalog` int(11) NOT NULL, `subscribeCycleForMobilePosition` int(11) NOT NULL, `mobilePositionSubmissionInterval` int(11) NOT NULL DEFAULT '5', `subscribeCycleForAlarm` int(11) NOT NULL, `hostAddress` varchar(50) NOT NULL, `charset` varchar(50) NOT NULL, `ssrcCheck` int(11) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `device_deviceId_uindex` (`deviceId`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -65,20 +66,20 @@ DROP TABLE IF EXISTS `device_alarm`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `device_alarm` ( `id` int NOT NULL AUTO_INCREMENT, `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `alarmPriority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `alarmMethod` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `alarmTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `alarmDescription` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `deviceId` varchar(50) NOT NULL, `channelId` varchar(50) NOT NULL, `alarmPriority` varchar(50) NOT NULL, `alarmMethod` varchar(50) DEFAULT NULL, `alarmTime` varchar(50) NOT NULL, `alarmDescription` varchar(255) DEFAULT NULL, `longitude` double DEFAULT NULL, `latitude` double DEFAULT NULL, `alarmType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `alarmType` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -96,43 +97,43 @@ DROP TABLE IF EXISTS `device_channel`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `device_channel` ( `id` int NOT NULL AUTO_INCREMENT, `channelId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `manufacture` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `model` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `owner` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `civilCode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `block` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `address` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `parentId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `safetyWay` int DEFAULT NULL, `registerWay` int DEFAULT NULL, `certNum` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `certifiable` int DEFAULT NULL, `errCode` int DEFAULT NULL, `endTime` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `secrecy` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `ipAddress` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `port` int DEFAULT NULL, `password` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `PTZType` int DEFAULT NULL, `status` int DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `channelId` varchar(50) NOT NULL, `name` varchar(255) DEFAULT NULL, `manufacture` varchar(50) DEFAULT NULL, `model` varchar(50) DEFAULT NULL, `owner` varchar(50) DEFAULT NULL, `civilCode` varchar(50) DEFAULT NULL, `block` varchar(50) DEFAULT NULL, `address` varchar(50) DEFAULT NULL, `parentId` varchar(50) DEFAULT NULL, `safetyWay` int(11) DEFAULT NULL, `registerWay` int(11) DEFAULT NULL, `certNum` varchar(50) DEFAULT NULL, `certifiable` int(11) DEFAULT NULL, `errCode` int(11) DEFAULT NULL, `endTime` varchar(50) DEFAULT NULL, `secrecy` varchar(50) DEFAULT NULL, `ipAddress` varchar(50) DEFAULT NULL, `port` int(11) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `PTZType` int(11) DEFAULT NULL, `status` int(11) DEFAULT NULL, `longitude` double DEFAULT NULL, `latitude` double DEFAULT NULL, `streamId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `deviceId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `parental` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `streamId` varchar(50) DEFAULT NULL, `deviceId` varchar(50) NOT NULL, `parental` varchar(50) DEFAULT NULL, `hasAudio` bit(1) DEFAULT NULL, `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `updateTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `subCount` int DEFAULT '0', `createTime` varchar(50) NOT NULL, `updateTime` varchar(50) NOT NULL, `subCount` int(11) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `device_channel_id_uindex` (`id`), UNIQUE KEY `device_channel_pk` (`channelId`,`deviceId`) ) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB AUTO_INCREMENT=81657 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -150,24 +151,24 @@ DROP TABLE IF EXISTS `device_mobile_position`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `device_mobile_position` ( `id` int NOT NULL AUTO_INCREMENT, `deviceId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `channelId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `deviceName` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `time` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `deviceId` varchar(50) NOT NULL, `channelId` varchar(50) NOT NULL, `deviceName` varchar(255) DEFAULT NULL, `time` varchar(50) NOT NULL, `longitude` double NOT NULL, `latitude` double NOT NULL, `altitude` double DEFAULT NULL, `speed` double DEFAULT NULL, `direction` double DEFAULT NULL, `reportSource` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `geodeticSystem` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `cnLng` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `cnLat` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `reportSource` varchar(50) DEFAULT NULL, `geodeticSystem` varchar(50) DEFAULT NULL, `cnLng` varchar(50) DEFAULT NULL, `cnLat` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB AUTO_INCREMENT=6108 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -185,23 +186,23 @@ DROP TABLE IF EXISTS `gb_stream`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `gb_stream` ( `gbStreamId` int NOT NULL AUTO_INCREMENT, `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `gbId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `gbStreamId` int(11) NOT NULL AUTO_INCREMENT, `app` varchar(255) NOT NULL, `stream` varchar(255) NOT NULL, `gbId` varchar(50) NOT NULL, `name` varchar(255) DEFAULT NULL, `longitude` double DEFAULT NULL, `latitude` double DEFAULT NULL, `streamType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `status` int DEFAULT NULL, `createStamp` bigint DEFAULT NULL, `streamType` varchar(50) DEFAULT NULL, `mediaServerId` varchar(50) DEFAULT NULL, `status` int(11) DEFAULT NULL, `createStamp` bigint(20) DEFAULT NULL, PRIMARY KEY (`gbStreamId`) USING BTREE, UNIQUE KEY `app` (`app`,`stream`) USING BTREE, UNIQUE KEY `gbId` (`gbId`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=300766 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=300769 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -219,19 +220,19 @@ DROP TABLE IF EXISTS `log`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `log` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `result` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `timing` bigint NOT NULL, `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `type` varchar(50) NOT NULL, `uri` varchar(200) NOT NULL, `address` varchar(50) NOT NULL, `result` varchar(50) NOT NULL, `timing` bigint(20) NOT NULL, `username` varchar(50) NOT NULL, `createTime` varchar(50) NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=962 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=1552 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -249,34 +250,34 @@ DROP TABLE IF EXISTS `media_server`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `media_server` ( `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `hookIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `sdpIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `streamIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `httpPort` int NOT NULL, `httpSSlPort` int NOT NULL, `rtmpPort` int NOT NULL, `rtmpSSlPort` int NOT NULL, `rtpProxyPort` int NOT NULL, `rtspPort` int NOT NULL, `rtspSSLPort` int NOT NULL, `autoConfig` int NOT NULL, `secret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `streamNoneReaderDelayMS` int NOT NULL, `rtpEnable` int NOT NULL, `rtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `sendRtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `recordAssistPort` int NOT NULL, `defaultServer` int NOT NULL, `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `hookAliveInterval` int NOT NULL, `id` varchar(255) NOT NULL, `ip` varchar(50) NOT NULL, `hookIp` varchar(50) NOT NULL, `sdpIp` varchar(50) NOT NULL, `streamIp` varchar(50) NOT NULL, `httpPort` int(11) NOT NULL, `httpSSlPort` int(11) NOT NULL, `rtmpPort` int(11) NOT NULL, `rtmpSSlPort` int(11) NOT NULL, `rtpProxyPort` int(11) NOT NULL, `rtspPort` int(11) NOT NULL, `rtspSSLPort` int(11) NOT NULL, `autoConfig` int(11) NOT NULL, `secret` varchar(50) NOT NULL, `streamNoneReaderDelayMS` int(11) NOT NULL, `rtpEnable` int(11) NOT NULL, `rtpPortRange` varchar(50) NOT NULL, `sendRtpPortRange` varchar(50) NOT NULL, `recordAssistPort` int(11) NOT NULL, `defaultServer` int(11) NOT NULL, `createTime` varchar(50) NOT NULL, `updateTime` varchar(50) NOT NULL, `hookAliveInterval` int(11) NOT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `media_server_i` (`ip`,`httpPort`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -294,33 +295,36 @@ DROP TABLE IF EXISTS `parent_platform`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `parent_platform` ( `id` int NOT NULL AUTO_INCREMENT, `enable` int DEFAULT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `serverGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `serverGBDomain` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `serverIP` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `serverPort` int DEFAULT NULL, `deviceGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `deviceIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `devicePort` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `expires` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `keepTimeout` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `transport` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `characterSet` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `ptz` int DEFAULT NULL, `rtcp` int DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `enable` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `serverGBId` varchar(50) NOT NULL, `serverGBDomain` varchar(50) DEFAULT NULL, `serverIP` varchar(50) DEFAULT NULL, `serverPort` int(11) DEFAULT NULL, `deviceGBId` varchar(50) NOT NULL, `deviceIp` varchar(50) DEFAULT NULL, `devicePort` varchar(50) DEFAULT NULL, `username` varchar(255) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `expires` varchar(50) DEFAULT NULL, `keepTimeout` varchar(50) DEFAULT NULL, `transport` varchar(50) DEFAULT NULL, `characterSet` varchar(50) DEFAULT NULL, `catalogId` varchar(50) NOT NULL, `ptz` int(11) DEFAULT NULL, `rtcp` int(11) DEFAULT NULL, `status` bit(1) DEFAULT NULL, `shareAllLiveStream` int DEFAULT NULL, `shareAllLiveStream` int(11) DEFAULT NULL, `startOfflinePush` int(11) DEFAULT '0', `administrativeDivision` varchar(50) NOT NULL, `catalogGroup` int(11) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `parent_platform_id_uindex` (`id`), UNIQUE KEY `parent_platform_pk` (`serverGBId`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -338,14 +342,14 @@ DROP TABLE IF EXISTS `platform_catalog`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `platform_catalog` ( `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `parentId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `id` varchar(50) NOT NULL, `platformId` varchar(50) NOT NULL, `name` varchar(255) NOT NULL, `parentId` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -363,14 +367,14 @@ DROP TABLE IF EXISTS `platform_gb_channel`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `platform_gb_channel` ( `id` int NOT NULL AUTO_INCREMENT, `platformId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `catalogId` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `deviceChannelId` int NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `platformId` varchar(50) NOT NULL, `catalogId` varchar(50) NOT NULL, `deviceChannelId` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB AUTO_INCREMENT=250 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -388,15 +392,15 @@ DROP TABLE IF EXISTS `platform_gb_stream`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `platform_gb_stream` ( `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `gbStreamId` int NOT NULL, `id` int NOT NULL AUTO_INCREMENT, `platformId` varchar(50) NOT NULL, `catalogId` varchar(50) NOT NULL, `gbStreamId` int(11) NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), UNIQUE KEY `platform_gb_stream_pk` (`platformId`,`catalogId`,`gbStreamId`) ) ENGINE=InnoDB AUTO_INCREMENT=301207 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=301210 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -414,29 +418,29 @@ DROP TABLE IF EXISTS `stream_proxy`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `stream_proxy` ( `id` int NOT NULL AUTO_INCREMENT, `type` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `app` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `stream` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `src_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `dst_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `timeout_ms` int DEFAULT NULL, `ffmpeg_cmd_key` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `rtp_type` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `mediaServerId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `type` varchar(50) NOT NULL, `app` varchar(255) NOT NULL, `stream` varchar(255) NOT NULL, `url` varchar(255) DEFAULT NULL, `src_url` varchar(255) DEFAULT NULL, `dst_url` varchar(255) DEFAULT NULL, `timeout_ms` int(11) DEFAULT NULL, `ffmpeg_cmd_key` varchar(255) DEFAULT NULL, `rtp_type` varchar(50) DEFAULT NULL, `mediaServerId` varchar(50) DEFAULT NULL, `enable_hls` bit(1) DEFAULT NULL, `enable_mp4` bit(1) DEFAULT NULL, `enable` bit(1) NOT NULL, `status` bit(1) NOT NULL, `enable_remove_none_reader` bit(1) NOT NULL, `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `createTime` varchar(50) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `stream_proxy_pk` (`app`,`stream`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -454,20 +458,20 @@ DROP TABLE IF EXISTS `stream_push`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `stream_push` ( `id` int NOT NULL AUTO_INCREMENT, `app` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `stream` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `totalReaderCount` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `originType` int DEFAULT NULL, `originTypeStr` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `createStamp` bigint DEFAULT NULL, `aliveSecond` int DEFAULT NULL, `mediaServerId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `app` varchar(255) NOT NULL, `stream` varchar(255) NOT NULL, `totalReaderCount` varchar(50) DEFAULT NULL, `originType` int(11) DEFAULT NULL, `originTypeStr` varchar(50) DEFAULT NULL, `createStamp` bigint(20) DEFAULT NULL, `aliveSecond` int(11) DEFAULT NULL, `mediaServerId` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `stream_push_pk` (`app`,`stream`) ) ENGINE=InnoDB AUTO_INCREMENT=300799 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB AUTO_INCREMENT=300838 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -485,17 +489,17 @@ DROP TABLE IF EXISTS `user`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `roleId` int NOT NULL, `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `roleId` int(11) NOT NULL, `createTime` varchar(50) NOT NULL, `updateTime` varchar(50) NOT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `user_username_uindex` (`username`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -504,7 +508,8 @@ LOCK TABLES `user` WRITE; /*!40000 ALTER TABLE `user` DISABLE KEYS */; INSERT INTO `user` VALUES (1,'admin','21232f297a57a5a743894a0e4a801fc3',1,'2021 - 04 - 13 14:14:57','2021 - 04 - 13 14:14:57'); INSERT INTO `user` VALUES (1,'admin','21232f297a57a5a743894a0e4a801fc3',1,'2021 - 04 - 13 14:14:57','2021 - 04 - 13 14:14:57'); /*!40000 ALTER TABLE `user` ENABLE KEYS */; UNLOCK TABLES; @@ -514,15 +519,15 @@ DROP TABLE IF EXISTS `user_role`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `user_role` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `authority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `authority` varchar(50) NOT NULL, `createTime` varchar(50) NOT NULL, `updateTime` varchar(50) NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -531,7 +536,8 @@ LOCK TABLES `user_role` WRITE; /*!40000 ALTER TABLE `user_role` DISABLE KEYS */; INSERT INTO `user_role` VALUES (1,'admin','0','2021-04-13 14:14:57','2021-04-13 14:14:57'); INSERT INTO `user_role` VALUES (1,'admin','0','2021-04-13 14:14:57','2021-04-13 14:14:57'); /*!40000 ALTER TABLE `user_role` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -544,4 +550,4 @@ /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2022-03-07 8:26:30 -- Dump completed on 2022-04-18 10:50:27 sql/update.sql
@@ -1,8 +1,12 @@ alter table device add subscribeCycleForMobilePosition int null; alter table parent_platform add startOfflinePush int default 0 null; alter table parent_platform add administrativeDivision varchar(50) not null; alter table parent_platform add catalogGroup int default 1 null; alter table device add mobilePositionSubmissionInterval int default 5 null; add ssrcCheck int default 0 null; alter table device add subscribeCycleForAlarm int null; src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
@@ -76,7 +76,6 @@ */ public void startDelay(String key, Runnable task, int delay) { stop(key); System.out.println("定时任务开始了"); Date starTime = new Date(System.currentTimeMillis() + delay); ScheduledFuture future = futureMap.get(key); @@ -100,7 +99,6 @@ } public void stop(String key) { System.out.println("定时任务结束了"); if (futureMap.get(key) != null && !futureMap.get(key).isCancelled()) { futureMap.get(key).cancel(true); Runnable runnable = runnableMap.get(key); src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -48,6 +48,7 @@ properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP"); properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getMonitorIp()); properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true"); properties.setProperty("gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY", "true"); // 接收所有notify请求,即使没有订阅 /** * sip_server_log.log 和 sip_debug_log.log public static final int TRACE_NONE = * 0; public static final int TRACE_MESSAGES = 16; public static final int src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java
@@ -4,6 +4,7 @@ import java.util.List; public class CatalogData { private int sn; // 命令序列号 private int total; private List<DeviceChannel> channelList; private Date lastTime; @@ -15,6 +16,15 @@ } private CatalogDataStatus status; public int getSn() { return sn; } public void setSn(int sn) { this.sn = sn; } public int getTotal() { return total; } src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
@@ -129,6 +129,11 @@ */ private int subscribeCycleForAlarm; /** * 是否开启ssrc校验,默认关闭,开启可以防止串流 */ private boolean ssrcCheck; public String getDeviceId() { return deviceId; @@ -321,4 +326,12 @@ public void setSubscribeCycleForAlarm(int subscribeCycleForAlarm) { this.subscribeCycleForAlarm = subscribeCycleForAlarm; } public boolean isSsrcCheck() { return ssrcCheck; } public void setSsrcCheck(boolean ssrcCheck) { this.ssrcCheck = ssrcCheck; } } src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
@@ -169,6 +169,11 @@ */ private boolean hasAudio; /** * 标记通道的类型,0->国标通道 1->直播流通道 2->业务分组/虚拟组织/行政区划 */ private int channelType; public int getId() { return id; } @@ -441,4 +446,12 @@ public void setUpdateTime(String updateTime) { this.updateTime = updateTime; } public int getChannelType() { return channelType; } public void setChannelType(int channelType) { this.channelType = channelType; } } src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
@@ -129,6 +129,21 @@ */ private boolean mobilePositionSubscribe; /** * 点播未推流的设备时是否使用redis通知拉起 */ private boolean startOfflinePush; /** * 目录分组-每次向上级发送通道信息时单个包携带的通道数量,取值1,2,4,8 */ private int catalogGroup; /** * 行政区划 */ private String administrativeDivision; public Integer getId() { return id; } @@ -329,4 +344,28 @@ public void setMobilePositionSubscribe(boolean mobilePositionSubscribe) { this.mobilePositionSubscribe = mobilePositionSubscribe; } public boolean isStartOfflinePush() { return startOfflinePush; } public void setStartOfflinePush(boolean startOfflinePush) { this.startOfflinePush = startOfflinePush; } public int getCatalogGroup() { return catalogGroup; } public void setCatalogGroup(int catalogGroup) { this.catalogGroup = catalogGroup; } public String getAdministrativeDivision() { return administrativeDivision; } public void setAdministrativeDivision(String administrativeDivision) { this.administrativeDivision = administrativeDivision; } } src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
@@ -54,6 +54,7 @@ @Autowired private SIPCommander cmder; private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override @@ -74,7 +75,7 @@ if (deviceInStore == null) { //第一次上线 logger.info("[{}] 首次注册,查询设备信息以及通道信息", device.getDeviceId()); cmder.deviceInfoQuery(device); cmder.catalogQuery(device, null); deviceService.sync(device); } break; // 设备主动发送心跳触发的在线事件 src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
@@ -26,28 +26,35 @@ @Autowired private IVideoManagerStorage storager; public void addReady(String key) { CatalogData catalogData = data.get(key); public void addReady(Device device, int sn ) { CatalogData catalogData = data.get(device.getDeviceId()); if (catalogData == null || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) { catalogData = new CatalogData(); catalogData.setChannelList(new ArrayList<>()); catalogData.setDevice(device); catalogData.setSn(sn); catalogData.setStatus(CatalogData.CatalogDataStatus.ready); catalogData.setLastTime(new Date(System.currentTimeMillis())); data.put(key, catalogData); data.put(device.getDeviceId(), catalogData); } } public void put(String key, int total, Device device, List<DeviceChannel> deviceChannelList) { CatalogData catalogData = data.get(key); public void put(String deviceId, int sn, int total, Device device, List<DeviceChannel> deviceChannelList) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) { catalogData = new CatalogData(); catalogData.setSn(sn); catalogData.setTotal(total); catalogData.setDevice(device); catalogData.setChannelList(new ArrayList<>()); catalogData.setStatus(CatalogData.CatalogDataStatus.runIng); catalogData.setLastTime(new Date(System.currentTimeMillis())); data.put(key, catalogData); data.put(deviceId, catalogData); }else { // 同一个设备的通道同步请求只考虑一个,其他的直接忽略 if (catalogData.getSn() != sn) { return; } catalogData.setTotal(total); catalogData.setDevice(device); catalogData.setStatus(CatalogData.CatalogDataStatus.runIng); @@ -56,20 +63,20 @@ } } public List<DeviceChannel> get(String key) { CatalogData catalogData = data.get(key); public List<DeviceChannel> get(String deviceId) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) return null; return catalogData.getChannelList(); } public int getTotal(String key) { CatalogData catalogData = data.get(key); public int getTotal(String deviceId) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) return 0; return catalogData.getTotal(); } public SyncStatus getSyncStatus(String key) { CatalogData catalogData = data.get(key); public SyncStatus getSyncStatus(String deviceId) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) return null; SyncStatus syncStatus = new SyncStatus(); syncStatus.setCurrent(catalogData.getChannelList().size()); @@ -78,8 +85,10 @@ return syncStatus; } public void del(String key) { data.remove(key); public boolean isSyncRunning(String deviceId) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) return false; return !catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end); } @Scheduled(fixedRate = 5 * 1000) //每5秒执行一次, 发现数据5秒未更新则移除数据并认为数据接收超时 @@ -92,23 +101,30 @@ Calendar calendarBefore30S = Calendar.getInstance(); calendarBefore30S.setTime(new Date()); calendarBefore30S.set(Calendar.SECOND, calendarBefore30S.get(Calendar.SECOND) - 30); for (String key : keys) { CatalogData catalogData = data.get(key); for (String deviceId : keys) { CatalogData catalogData = data.get(deviceId); if (catalogData.getLastTime().before(calendarBefore5S.getTime())) { // 超过五秒收不到消息任务超时, 只更新这一部分数据 if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.runIng)) { storager.resetChannels(catalogData.getDevice().getDeviceId(), catalogData.getChannelList()); if (catalogData.getTotal() != catalogData.getChannelList().size()) { String errorMsg = "更新成功,共" + catalogData.getTotal() + "条,已更新" + catalogData.getChannelList().size() + "条"; catalogData.setStatus(CatalogData.CatalogDataStatus.end); catalogData.setErrorMsg(errorMsg); } if (catalogData.getLastTime().before(calendarBefore30S.getTime())) { // 超过三十秒,如果标记为end则删除 data.remove(key); }else if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.ready)) { String errorMsg = "同步失败,等待回复超时"; catalogData.setErrorMsg(errorMsg); } catalogData.setStatus(CatalogData.CatalogDataStatus.end); } if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end) && catalogData.getLastTime().before(calendarBefore30S.getTime())) { // 超过三十秒,如果标记为end则删除 data.remove(deviceId); } } } public void setChannelSyncEnd(String key, String errorMsg) { CatalogData catalogData = data.get(key); public void setChannelSyncEnd(String deviceId, String errorMsg) { CatalogData catalogData = data.get(deviceId); if (catalogData == null)return; catalogData.setStatus(CatalogData.CatalogDataStatus.end); catalogData.setErrorMsg(errorMsg); src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java
@@ -10,6 +10,8 @@ import javax.sip.Dialog; import javax.sip.DialogState; import javax.sip.ResponseEvent; import java.util.Timer; import java.util.TimerTask; /** * 目录订阅任务 @@ -20,6 +22,8 @@ private final ISIPCommander sipCommander; private Dialog dialog; private Timer timer ; public CatalogSubscribeTask(Device device, ISIPCommander sipCommander) { this.device = device; this.sipCommander = sipCommander; @@ -27,6 +31,10 @@ @Override public void run() { if (timer != null ) { timer.cancel(); timer = null; } sipCommander.catalogSubscribe(device, dialog, eventResult -> { if (eventResult.dialog != null || eventResult.dialog.getState().equals(DialogState.CONFIRMED)) { dialog = eventResult.dialog; @@ -43,6 +51,13 @@ dialog = null; // 失败 logger.warn("[目录订阅]失败,信令发送失败: {}-{} ", device.getDeviceId(), eventResult.msg); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { CatalogSubscribeTask.this.run(); } }, 2000); }); } @@ -56,9 +71,13 @@ * TERMINATED-> Terminated Dialog状态-终止 */ logger.info("取消目录订阅时dialog状态为{}", DialogState.CONFIRMED); if (timer != null ) { timer.cancel(); timer = null; } if (dialog != null && dialog.getState().equals(DialogState.CONFIRMED)) { device.setSubscribeCycleForCatalog(0); sipCommander.mobilePositionSubscribe(device, dialog, eventResult -> { sipCommander.catalogSubscribe(device, dialog, eventResult -> { ResponseEvent event = (ResponseEvent) eventResult.event; if (event.getResponse().getRawContent() != null) { // 成功 src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java
@@ -29,7 +29,6 @@ private String key; public MobilePositionSubscribeHandlerTask(IRedisCatchStorage redisCatchStorage, ISIPCommanderForPlatform sipCommanderForPlatform, IVideoManagerStorage storager, String platformId, String sn, String key, SubscribeHolder subscribeInfo) { System.out.println("MobilePositionSubscribeHandlerTask 初始化"); this.redisCatchStorage = redisCatchStorage; this.storager = storager; this.platform = storager.queryParentPlatByServerGBId(platformId); @@ -42,7 +41,6 @@ @Override public void run() { logger.info("执行MobilePositionSubscribeHandlerTask"); if (platform == null) return; SubscribeInfo subscribe = subscribeHolder.getMobilePositionSubscribe(platform.getServerGBId()); if (subscribe != null) { @@ -71,7 +69,6 @@ } } } logger.info("结束执行MobilePositionSubscribeHandlerTask"); } @Override src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -250,7 +250,7 @@ * * @param device 视频设备 */ boolean catalogQuery(Device device, SipSubscribe.Event errorEvent); boolean catalogQuery(Device device, int sn, SipSubscribe.Event errorEvent); /** * 查询录像信息 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -1208,14 +1208,14 @@ * @param device 视频设备 */ @Override public boolean catalogQuery(Device device, SipSubscribe.Event errorEvent) { public boolean catalogQuery(Device device, int sn, SipSubscribe.Event errorEvent) { try { StringBuffer catalogXml = new StringBuffer(200); String charset = device.getCharset(); catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n"); catalogXml.append("<Query>\r\n"); catalogXml.append("<CmdType>Catalog</CmdType>\r\n"); catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); catalogXml.append("<SN>" + sn + "</SN>\r\n"); catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); catalogXml.append("</Query>\r\n"); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -32,6 +32,7 @@ import javax.sip.message.Request; import java.lang.reflect.Field; import java.text.ParseException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.UUID; @@ -215,7 +216,11 @@ return false; } try { String catalogXml = getCatalogXml(channel, sn, parentPlatform, size); List<DeviceChannel> channels = new ArrayList<>(); if (channel != null) { channels.add(channel); } String catalogXml = getCatalogXml(channels, sn, parentPlatform, size); // callid CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() @@ -239,7 +244,7 @@ sendCatalogResponse(channels, parentPlatform, sn, fromTag, 0); return true; } private String getCatalogXml(DeviceChannel channel, String sn, ParentPlatform parentPlatform, int size) { private String getCatalogXml(List<DeviceChannel> channels, String sn, ParentPlatform parentPlatform, int size) { String characterSet = parentPlatform.getCharacterSet(); StringBuffer catalogXml = new StringBuffer(600); catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet +"\"?>\r\n"); @@ -248,23 +253,25 @@ catalogXml.append("<SN>" +sn + "</SN>\r\n"); catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n"); catalogXml.append("<SumNum>" + size + "</SumNum>\r\n"); catalogXml.append("<DeviceList Num=\"1\">\r\n"); catalogXml.append("<DeviceList Num=\"" + channels.size() +"\">\r\n"); if (channels.size() > 0) { for (DeviceChannel channel : channels) { catalogXml.append("<Item>\r\n"); if (channel != null) { catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n"); catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n"); catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n"); catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n"); catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n"); catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n"); catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n"); catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n"); if (channel.getParentId() != null) { catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n"); } catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n"); catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n"); catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n"); catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n"); if (channel.getChannelType() != 2) { // 业务分组/虚拟组织/行政区划 不设置以下字段 catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n"); catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n"); catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n"); catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n"); catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n"); catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n"); catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n"); @@ -274,8 +281,10 @@ catalogXml.append("</Info>\r\n"); } catalogXml.append("</Item>\r\n"); } } catalogXml.append("</DeviceList>\r\n"); catalogXml.append("</Response>\r\n"); return catalogXml.toString(); @@ -286,15 +295,20 @@ return; } try { DeviceChannel deviceChannel = channels.get(index); String catalogXml = getCatalogXml(deviceChannel, sn, parentPlatform, channels.size()); List<DeviceChannel> deviceChannels; if (index + parentPlatform.getCatalogGroup() < channels.size()) { deviceChannels = channels.subList(index, index + parentPlatform.getCatalogGroup()); }else { deviceChannels = channels.subList(index, channels.size()); } String catalogXml = getCatalogXml(deviceChannels, sn, parentPlatform, channels.size()); // callid CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() : udpSipProvider.getNewCallId(); Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, callIdHeader); transmitRequest(parentPlatform, request, null, eventResult -> { int indexNext = index + 1; int indexNext = index + parentPlatform.getCatalogGroup(); sendCatalogResponse(channels, parentPlatform, sn, fromTag, indexNext); }); } catch (SipException | ParseException | InvalidArgumentException e) { @@ -432,13 +446,21 @@ if (index >= deviceChannels.size()) { return true; } List<DeviceChannel> channels; if (index + parentPlatform.getCatalogGroup() < deviceChannels.size()) { channels = deviceChannels.subList(index, index + parentPlatform.getCatalogGroup()); }else { channels = deviceChannels.subList(index, deviceChannels.size()); } try { Integer finalIndex = index; String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, deviceChannels.get(index ), deviceChannels.size(), type, subscribeInfo); String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channels, deviceChannels.size(), type, subscribeInfo); sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> { logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg); }, (eventResult -> { sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1); sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + parentPlatform.getCatalogGroup()); })); } catch (SipException | ParseException e) { e.printStackTrace(); @@ -500,11 +522,9 @@ } private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, DeviceChannel channel, int sumNum, String type, SubscribeInfo subscribeInfo) { private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, List<DeviceChannel> channels, int sumNum, String type, SubscribeInfo subscribeInfo) { StringBuffer catalogXml = new StringBuffer(600); if (parentPlatform.getServerGBId().equals(channel.getParentId())) { channel.setParentId(parentPlatform.getDeviceGBId()); } String characterSet = parentPlatform.getCharacterSet(); catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n"); catalogXml.append("<Notify>\r\n"); @@ -512,15 +532,16 @@ catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n"); catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n"); catalogXml.append("<SumNum>1</SumNum>\r\n"); catalogXml.append("<DeviceList Num=\"1\">\r\n"); catalogXml.append("<DeviceList Num=\"" + channels.size() + "\">\r\n"); if (channels.size() > 0) { for (DeviceChannel channel : channels) { if (parentPlatform.getServerGBId().equals(channel.getParentId())) { channel.setParentId(parentPlatform.getDeviceGBId()); } catalogXml.append("<Item>\r\n"); catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n"); catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n"); catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n"); catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n"); catalogXml.append("<Owner>0</Owner>\r\n"); catalogXml.append("<CivilCode>CivilCode</CivilCode>\r\n"); catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n"); catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n"); if (channel.getParentId() != null) { catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n"); @@ -528,10 +549,18 @@ catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n"); catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n"); catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n"); if (channel.getChannelType() == 2) { // 业务分组/虚拟组织/行政区划 不设置以下属性 catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n"); catalogXml.append("<Owner>0</Owner>\r\n"); catalogXml.append("<CivilCode>CivilCode</CivilCode>\r\n"); catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n"); } if (!"presence".equals(subscribeInfo.getEventType())) { catalogXml.append("<Event>" + type + "</Event>\r\n"); } catalogXml.append("</Item>\r\n"); } } catalogXml.append("</DeviceList>\r\n"); catalogXml.append("</Notify>\r\n"); return catalogXml.toString(); @@ -553,13 +582,20 @@ if (index >= deviceChannels.size()) { return true; } List<DeviceChannel> channels; if (index + parentPlatform.getCatalogGroup() < deviceChannels.size()) { channels = deviceChannels.subList(index, index + parentPlatform.getCatalogGroup()); }else { channels = deviceChannels.subList(index, deviceChannels.size()); } try { Integer finalIndex = index; String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, deviceChannels.get(index), type); String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, channels, type); sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> { logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg); }, (eventResult -> { sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1); sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + parentPlatform.getCatalogGroup()); })); } catch (SipException e) { e.printStackTrace(); @@ -574,10 +610,8 @@ return true; } private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, DeviceChannel channel, String type) { if (parentPlatform.getServerGBId().equals(channel.getParentId())) { channel.setParentId(parentPlatform.getDeviceGBId()); } private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, List<DeviceChannel> channels, String type) { String characterSet = parentPlatform.getCharacterSet(); StringBuffer catalogXml = new StringBuffer(600); catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n"); @@ -586,11 +620,18 @@ catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n"); catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n"); catalogXml.append("<SumNum>1</SumNum>\r\n"); catalogXml.append("<DeviceList Num=\"1\">\r\n"); catalogXml.append("<DeviceList Num=\" " + channels.size() + " \">\r\n"); if (channels.size() > 0) { for (DeviceChannel channel : channels) { if (parentPlatform.getServerGBId().equals(channel.getParentId())) { channel.setParentId(parentPlatform.getDeviceGBId()); } catalogXml.append("<Item>\r\n"); catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n"); catalogXml.append("<Event>" + type + "</Event>\r\n"); catalogXml.append("</Item>\r\n"); } } catalogXml.append("</DeviceList>\r\n"); catalogXml.append("</Notify>\r\n"); return catalogXml.toString(); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -397,6 +397,10 @@ logger.info("[ app={}, stream={} ]通道离线,启用流后开始推流",gbStream.getApp(), gbStream.getStream()); responseAck(evt, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline"); }else if ("push".equals(gbStream.getStreamType())) { if (!platform.isStartOfflinePush()) { responseAck(evt, Response.TEMPORARILY_UNAVAILABLE, "channel unavailable"); return; } // 发送redis消息以使设备上线 logger.info("[ app={}, stream={} ]通道离线,发送redis信息控制设备开始推流",gbStream.getApp(), gbStream.getStream()); MessageForPushChannel messageForPushChannel = new MessageForPushChannel(); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -3,7 +3,6 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper; import com.genersoft.iot.vmp.gb28181.auth.RegisterLogicHandler; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; @@ -42,15 +41,12 @@ @Component public class RegisterRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor { private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class); private final Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class); public String method = "REGISTER"; @Autowired private SipConfig sipConfig; @Autowired private RegisterLogicHandler handler; @Autowired private IRedisCatchStorage redisCatchStorage; @@ -72,6 +68,7 @@ /** * 收到注册请求 处理 * * @param evt */ @Override @@ -90,35 +87,36 @@ AddressImpl address = (AddressImpl) fromHeader.getAddress(); SipUri uri = (SipUri) address.getURI(); String deviceId = uri.getUser(); AuthorizationHeader authHead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); if (authHead == null) { logger.info("[{}] 未携带授权头 回复401", requestAddress); response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request); new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain()); sendResponse(evt, response); return; } // 校验密码是否正确 passwordCorrect = StringUtils.isEmpty(sipConfig.getPassword()) || new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request, sipConfig.getPassword()); // 未携带授权头或者密码错误 回复401 if (!passwordCorrect) { // 注册失败 response = getMessageFactory().createResponse(Response.FORBIDDEN, request); response.setReasonPhrase("wrong password"); logger.info("[{}] 密码/SIP服务器ID错误, 回复403", requestAddress); sendResponse(evt, response); return; } Device deviceInRedis = redisCatchStorage.getDevice(deviceId); Device device = storager.queryVideoDevice(deviceId); if (deviceInRedis != null && device == null) { // redis 存在脏数据 redisCatchStorage.clearCatchByDeviceId(deviceId); } AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); // 校验密码是否正确 if (authorhead != null) { passwordCorrect = new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request, sipConfig.getPassword()); } if (StringUtils.isEmpty(sipConfig.getPassword())){ passwordCorrect = true; } // 未携带授权头或者密码错误 回复401 if (authorhead == null ) { logger.info("[{}] 未携带授权头 回复401", requestAddress); response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request); new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain()); }else { if (!passwordCorrect){ // 注册失败 response = getMessageFactory().createResponse(Response.FORBIDDEN, request); response.setReasonPhrase("wrong password"); logger.info("[{}] 密码/SIP服务器ID错误, 回复403", requestAddress); }else { // 携带授权头并且密码正确 response = getMessageFactory().createResponse(Response.OK, request); // 添加date头 @@ -127,7 +125,6 @@ WvpSipDate wvpSipDate = new WvpSipDate(Calendar.getInstance(Locale.ENGLISH).getTimeInMillis()); dateHeader.setDate(wvpSipDate); response.addHeader(dateHeader); if (expiresHeader == null) { response = getMessageFactory().createResponse(Response.BAD_REQUEST, request); @@ -150,8 +147,6 @@ received = viaHeader.getHost(); rPort = viaHeader.getPort(); } // if (device == null) { device = new Device(); device.setStreamMode("UDP"); @@ -159,44 +154,33 @@ device.setDeviceId(deviceId); device.setFirsRegister(true); }else { if (device.getOnline() == 0) { device.setFirsRegister(true); } device.setFirsRegister(device.getOnline() == 0); } device.setIp(received); device.setPort(rPort); device.setHostAddress(received.concat(":").concat(String.valueOf(rPort))); // 注销成功 if (expiresHeader.getExpires() == 0) { // 注销成功 registerFlag = 2; } } else { // 注册成功 else { device.setExpires(expiresHeader.getExpires()); registerFlag = 1; // 判断TCP还是UDP boolean isTcp = false; ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); String transport = reqViaHeader.getTransport(); if (transport.equals("TCP")) { isTcp = true; } device.setTransport(isTcp ? "TCP" : "UDP"); } } device.setTransport("TCP".equals(transport) ? "TCP" : "UDP"); } ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); sendResponse(evt, response); // 注册成功 // 保存到redis if (registerFlag == 1 ) { logger.info("[{}] 注册成功! deviceId:" + device.getDeviceId(), requestAddress); logger.info("[{}] 注册成功! deviceId:" + deviceId, requestAddress); publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER, expiresHeader.getExpires()); } else if (registerFlag == 2) { logger.info("[{}] 注销成功! deviceId:" + device.getDeviceId(), requestAddress); publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER); logger.info("[{}] 注销成功! deviceId:" + deviceId, requestAddress); publisher.outlineEventPublish(deviceId, VideoManagerConstants.EVENT_OUTLINE_UNREGISTER); } } catch (SipException | InvalidArgumentException | NoSuchAlgorithmException | ParseException e) { e.printStackTrace(); @@ -204,4 +188,10 @@ } private void sendResponse(RequestEvent evt, Response response) throws InvalidArgumentException, SipException { ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); } } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
@@ -79,7 +79,7 @@ deviceChannel.setParental(1); deviceChannel.setParentId(catalog.getParentId()); deviceChannel.setRegisterWay(1); deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0,6)); deviceChannel.setCivilCode(parentPlatform.getAdministrativeDivision()); deviceChannel.setModel("live"); deviceChannel.setOwner("wvp-pro"); deviceChannel.setSecrecy("0"); @@ -116,7 +116,7 @@ deviceChannel.setStatus(1); deviceChannel.setParentId(gbStream.getCatalogId()); deviceChannel.setRegisterWay(1); deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0,6)); deviceChannel.setCivilCode(parentPlatform.getAdministrativeDivision()); deviceChannel.setModel("live"); deviceChannel.setOwner("wvp-pro"); deviceChannel.setParental(0); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
@@ -83,20 +83,17 @@ catalog.setParentId(parentPlatform.getDeviceGBId()); } DeviceChannel deviceChannel = new DeviceChannel(); // 通道的类型,0->国标通道 1->直播流通道 2->业务分组/虚拟组织/行政区划 deviceChannel.setChannelType(2); deviceChannel.setChannelId(catalog.getId()); deviceChannel.setName(catalog.getName()); deviceChannel.setLongitude(0.0); deviceChannel.setLatitude(0.0); deviceChannel.setDeviceId(parentPlatform.getDeviceGBId()); deviceChannel.setManufacture("wvp-pro"); deviceChannel.setStatus(1); deviceChannel.setParental(1); deviceChannel.setParentId(catalog.getParentId()); deviceChannel.setRegisterWay(1); deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0,6)); deviceChannel.setModel("live"); deviceChannel.setOwner("wvp-pro"); deviceChannel.setSecrecy("0"); deviceChannel.setCivilCode(parentPlatform.getAdministrativeDivision()); allChannels.add(deviceChannel); } } @@ -107,6 +104,8 @@ channel.setCatalogId(parentPlatform.getDeviceGBId()); } DeviceChannel deviceChannel = storage.queryChannel(channel.getDeviceId(), channel.getChannelId()); // 通道的类型,0->国标通道 1->直播流通道 2->业务分组/虚拟组织/行政区划 deviceChannel.setChannelType(0); deviceChannel.setParental(0); deviceChannel.setParentId(channel.getCatalogId()); deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0, 6)); @@ -120,6 +119,8 @@ gbStream.setCatalogId(null); } DeviceChannel deviceChannel = new DeviceChannel(); // 通道的类型,0->国标通道 1->直播流通道 2->业务分组/虚拟组织/行政区划 deviceChannel.setChannelType(1); deviceChannel.setChannelId(gbStream.getGbId()); deviceChannel.setName(gbStream.getName()); deviceChannel.setLongitude(gbStream.getLongitude()); @@ -130,7 +131,7 @@ deviceChannel.setStatus(1); deviceChannel.setParentId(gbStream.getCatalogId()); deviceChannel.setRegisterWay(1); deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0,6)); deviceChannel.setCivilCode(parentPlatform.getAdministrativeDivision()); deviceChannel.setModel("live"); deviceChannel.setOwner("wvp-pro"); deviceChannel.setParental(0); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -87,23 +87,17 @@ rootElement = getRootElement(evt, device.getCharset()); Element deviceListElement = rootElement.element("DeviceList"); Element sumNumElement = rootElement.element("SumNum"); if (sumNumElement == null || deviceListElement == null) { Element snElement = rootElement.element("SN"); if (snElement == null || sumNumElement == null || deviceListElement == null) { responseAck(evt, Response.BAD_REQUEST, "xml error"); return; } int sumNum = Integer.parseInt(sumNumElement.getText()); if (sumNum == 0) { // 数据已经完整接收 storager.cleanChannelsForDevice(device.getDeviceId()); RequestMessage msg = new RequestMessage(); msg.setKey(key); WVPResult<Object> result = new WVPResult<>(); result.setCode(0); result.setData(device); msg.setData(result); result.setMsg("更新成功,共0条"); deferredResultHolder.invokeAllResult(msg); catalogDataCatch.del(key); catalogDataCatch.setChannelSyncEnd(device.getDeviceId(), null); }else { Iterator<Element> deviceListIterator = deviceListElement.elementIterator(); if (deviceListIterator != null) { @@ -124,24 +118,18 @@ channelList.add(deviceChannel); } logger.info("收到来自设备【{}】的通道: {}个,{}/{}", device.getDeviceId(), channelList.size(), catalogDataCatch.get(key) == null ? 0 :catalogDataCatch.get(key).size(), sumNum); catalogDataCatch.put(key, sumNum, device, channelList); if (catalogDataCatch.get(key).size() == sumNum) { int sn = Integer.parseInt(snElement.getText()); catalogDataCatch.put(device.getDeviceId(), sn, sumNum, device, channelList); logger.info("收到来自设备【{}】的通道: {}个,{}/{}", device.getDeviceId(), channelList.size(), catalogDataCatch.get(device.getDeviceId()) == null ? 0 :catalogDataCatch.get(device.getDeviceId()).size(), sumNum); if (catalogDataCatch.get(device.getDeviceId()).size() == sumNum) { // 数据已经完整接收 boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(key)); RequestMessage msg = new RequestMessage(); msg.setKey(key); WVPResult<Object> result = new WVPResult<>(); result.setCode(0); result.setData(device); if (resetChannelsResult || sumNum ==0) { result.setMsg("更新成功,共" + sumNum + "条,已更新" + catalogDataCatch.get(key).size() + "条"); boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(device.getDeviceId())); if (!resetChannelsResult) { String errorMsg = "接收成功,写入失败,共" + sumNum + "条,已接收" + catalogDataCatch.get(device.getDeviceId()).size() + "条"; catalogDataCatch.setChannelSyncEnd(device.getDeviceId(), errorMsg); }else { result.setMsg("接收成功,写入失败,共" + sumNum + "条,已接收" + catalogDataCatch.get(key).size() + "条"); catalogDataCatch.setChannelSyncEnd(device.getDeviceId(), null); } msg.setData(result); deferredResultHolder.invokeAllResult(msg); catalogDataCatch.del(key); } } // 回复200 OK @@ -229,21 +217,26 @@ } public SyncStatus getChannelSyncProgress(String deviceId) { String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId; if (catalogDataCatch.get(key) == null) { if (catalogDataCatch.get(deviceId) == null) { return null; }else { return catalogDataCatch.getSyncStatus(key); return catalogDataCatch.getSyncStatus(deviceId); } } public void setChannelSyncReady(String deviceId) { String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId; catalogDataCatch.addReady(key); public boolean isSyncRunning(String deviceId) { if (catalogDataCatch.get(deviceId) == null) { return false; }else { return catalogDataCatch.isSyncRunning(deviceId); } } public void setChannelSyncReady(Device device, int sn) { catalogDataCatch.addReady(device, sn); } public void setChannelSyncEnd(String deviceId, String errorMsg) { String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId; catalogDataCatch.setChannelSyncEnd(key, errorMsg); catalogDataCatch.setChannelSyncEnd(deviceId, errorMsg); } } src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -81,7 +81,7 @@ return result; } public int createRTPServer(MediaServerItem mediaServerItem, String streamId) { public int createRTPServer(MediaServerItem mediaServerItem, String streamId, int ssrc) { int result = -1; // 查询此rtp server 是否已经存在 JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId); @@ -94,6 +94,7 @@ param.put("enable_tcp", 1); param.put("stream_id", streamId); param.put("port", 0); param.put("ssrc", ssrc); JSONObject openRtpServerResultJson = zlmresTfulUtils.openRtpServer(mediaServerItem, param); if (openRtpServerResultJson != null) { src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
@@ -44,15 +44,15 @@ SyncStatus getChannelSyncStatus(String deviceId); /** * 设置通道同步状态 * 查看是否仍在同步 * @param deviceId 设备ID * @return */ void setChannelSyncReady(String deviceId); Boolean isSyncRunning(String deviceId); /** * 设置同步结束 * @param deviceId 设备ID * @param errorMsg 错误信息 * 通道同步 * @param device */ void setChannelSyncEnd(String deviceId, String errorMsg); void sync(Device device); } src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
@@ -44,9 +44,9 @@ void updateVmServer(List<MediaServerItem> mediaServerItemList); SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId); SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean ssrcCheck); SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback); SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean ssrcCheck, boolean isPlayback); void closeRTPServer(String deviceId, String channelId, String ssrc); src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -41,10 +41,6 @@ if (device == null || device.getSubscribeCycleForCatalog() < 0) { return false; } CatalogSubscribeTask task = (CatalogSubscribeTask)dynamicTask.get(device.getDeviceId() + "catalog"); if (task != null && task.getDialogState() != null && task.getDialogState().equals(DialogState.CONFIRMED)) { // 已存在不需要再次添加 return true; } logger.info("[添加目录订阅] 设备{}", device.getDeviceId()); // 添加目录订阅 CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander); @@ -71,10 +67,6 @@ return false; } logger.info("[添加移动位置订阅] 设备{}", device.getDeviceId()); MobilePositionSubscribeTask task = (MobilePositionSubscribeTask)dynamicTask.get(device.getDeviceId() + "mobile_position"); if (task != null && task.getDialogState() != null && task.getDialogState().equals(DialogState.CONFIRMED)) { // 已存在不需要再次添加 return true; } // 添加目录订阅 MobilePositionSubscribeTask mobilePositionSubscribeTask = new MobilePositionSubscribeTask(device, sipCommander); // 提前开始刷新订阅 @@ -100,12 +92,21 @@ } @Override public void setChannelSyncReady(String deviceId) { catalogResponseMessageHandler.setChannelSyncReady(deviceId); public Boolean isSyncRunning(String deviceId) { return catalogResponseMessageHandler.isSyncRunning(deviceId); } @Override public void setChannelSyncEnd(String deviceId, String errorMsg) { catalogResponseMessageHandler.setChannelSyncEnd(deviceId, errorMsg); public void sync(Device device) { if (catalogResponseMessageHandler.isSyncRunning(device.getDeviceId())) { logger.info("开启同步时发现同步已经存在"); return; } 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); catalogResponseMessageHandler.setChannelSyncEnd(device.getDeviceId(), errorMsg); }); } } src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -117,12 +117,12 @@ } @Override public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId) { return openRTPServer(mediaServerItem, streamId, false); public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean ssrcCheck) { return openRTPServer(mediaServerItem, streamId, ssrcCheck,false); } @Override public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback) { public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean ssrcCheck, boolean isPlayback) { if (mediaServerItem == null || mediaServerItem.getId() == null) { return null; } @@ -146,7 +146,7 @@ } int rtpServerPort = mediaServerItem.getRtpProxyPort(); if (mediaServerItem.isRtpEnable()) { rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId); rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId, ssrcCheck?Integer.parseInt(ssrc):0); } redisUtil.set(key, mediaServerItem); return new SSRCInfo(rtpServerPort, ssrc, streamId); src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -188,7 +188,7 @@ if (mediaServerItem.isRtpEnable()) { streamId = String.format("%s_%s", device.getDeviceId(), channelId); } SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId); SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck()); play(mediaServerItem, ssrcInfo, device, channelId, (mediaServerItemInUse, response)->{ if (hookEvent != null) { hookEvent.response(mediaServerItem, response); @@ -232,7 +232,7 @@ streamId = String.format("%s_%s", device.getDeviceId(), channelId); } if (ssrcInfo == null) { ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId); ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck()); } // 超时处理 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -420,9 +420,6 @@ continue; } streamPushItemForPlatform.setPlatformId(platFormInfoArray[0]); if (platFormInfoArray[0].equals("34020000002110000001")) { System.out.println(111); } List<GbStream> gbStreamList = platformForEvent.get(platFormInfoArray[0]); if (gbStreamList == null) { gbStreamList = new ArrayList<>(); src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -37,6 +37,7 @@ "subscribeCycleForMobilePosition," + "mobilePositionSubmissionInterval," + "subscribeCycleForAlarm," + "ssrcCheck," + "online" + ") VALUES (" + "#{deviceId}," + @@ -59,6 +60,7 @@ "#{subscribeCycleForMobilePosition}," + "#{mobilePositionSubmissionInterval}," + "#{subscribeCycleForAlarm}," + "#{ssrcCheck}," + "#{online}" + ")") int add(Device device); @@ -84,6 +86,7 @@ "<if test=\"subscribeCycleForMobilePosition != null\">, subscribeCycleForMobilePosition=${subscribeCycleForMobilePosition}</if>" + "<if test=\"mobilePositionSubmissionInterval != null\">, mobilePositionSubmissionInterval=${mobilePositionSubmissionInterval}</if>" + "<if test=\"subscribeCycleForAlarm != null\">, subscribeCycleForAlarm=${subscribeCycleForAlarm}</if>" + "<if test=\"ssrcCheck != null\">, ssrcCheck=${ssrcCheck}</if>" + "WHERE deviceId='${deviceId}'"+ " </script>"}) int update(Device device); src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
@@ -16,10 +16,10 @@ @Insert("INSERT INTO parent_platform (enable, name, serverGBId, serverGBDomain, serverIP, serverPort, deviceGBId, deviceIp, " + " devicePort, username, password, expires, keepTimeout, transport, characterSet, ptz, rtcp, " + " status, shareAllLiveStream, catalogId) " + " status, shareAllLiveStream, startOfflinePush, catalogId, administrativeDivision, catalogGroup) " + " VALUES (${enable}, '${name}', '${serverGBId}', '${serverGBDomain}', '${serverIP}', ${serverPort}, '${deviceGBId}', '${deviceIp}', " + " '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${ptz}, ${rtcp}, " + " ${status}, ${shareAllLiveStream}, #{catalogId})") " ${status}, ${shareAllLiveStream}, ${startOfflinePush}, #{catalogId}, #{administrativeDivision}, #{catalogGroup})") int addParentPlatform(ParentPlatform parentPlatform); @Update("UPDATE parent_platform " + @@ -42,6 +42,9 @@ "rtcp=#{rtcp}, " + "status=#{status}, " + "shareAllLiveStream=#{shareAllLiveStream}, " + "startOfflinePush=${startOfflinePush}, " + "catalogGroup=#{catalogGroup}, " + "administrativeDivision=#{administrativeDivision}, " + "catalogId=#{catalogId} " + "WHERE id=#{id}") int updateParentPlatform(ParentPlatform parentPlatform); src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
@@ -238,12 +238,15 @@ @Override public boolean resetChannels(String deviceId, List<DeviceChannel> deviceChannelList) { if (deviceChannelList == null) { return false; } TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); // 数据去重 List<DeviceChannel> channels = new ArrayList<>(); StringBuilder stringBuilder = new StringBuilder(); Map<String, Integer> subContMap = new HashMap<>(); if (deviceChannelList.size() > 1) { if (deviceChannelList != null && deviceChannelList.size() > 1) { // 数据去重 Set<String> gbIdSet = new HashSet<>(); for (DeviceChannel deviceChannel : deviceChannelList) { @@ -300,6 +303,7 @@ dataSourceTransactionManager.commit(transactionStatus); //手动提交 return true; }catch (Exception e) { e.printStackTrace(); dataSourceTransactionManager.rollback(transactionStatus); return false; } @@ -415,10 +419,9 @@ TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); boolean result = false; try { if (platformChannelMapper.delChannelForDeviceId(deviceId) <0 // 删除与国标平台的关联 || deviceChannelMapper.cleanChannelsByDeviceId(deviceId) < 0 // 删除他的通道 || deviceMapper.del(deviceId) < 0 // 移除设备信息 ) { platformChannelMapper.delChannelForDeviceId(deviceId); deviceChannelMapper.cleanChannelsByDeviceId(deviceId); if ( deviceMapper.del(deviceId) < 0 ) { //事务回滚 dataSourceTransactionManager.rollback(transactionStatus); } @@ -517,6 +520,12 @@ @Override public boolean updateParentPlatform(ParentPlatform parentPlatform) { int result = 0; if (parentPlatform.getCatalogGroup() == 0) { parentPlatform.setCatalogGroup(1); } if (parentPlatform.getAdministrativeDivision() == null) { parentPlatform.setAdministrativeDivision(parentPlatform.getAdministrativeDivision()); } ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); // .getDeviceGBId()); if (parentPlatform.getId() == null ) { if (parentPlatform.getCatalogId() == null) { @@ -536,6 +545,7 @@ parentPlatformCatch.setId(parentPlatform.getServerGBId()); redisCatchStorage.delPlatformCatchInfo(parentPlatById.getServerGBId()); } result = platformMapper.updateParentPlatform(parentPlatform); } // 更新缓存 @@ -1071,7 +1081,7 @@ deviceChannel.setParentId(catalog.getParentId()); deviceChannel.setRegisterWay(1); // 行政区划应该是Domain的前八位 deviceChannel.setCivilCode(parentPlatByServerGBId.getDeviceGBId().substring(0,6)); deviceChannel.setCivilCode(parentPlatByServerGBId.getAdministrativeDivision()); deviceChannel.setModel("live"); deviceChannel.setOwner("wvp-pro"); deviceChannel.setSecrecy("0"); src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -164,20 +164,17 @@ logger.debug("设备通道信息同步API调用,deviceId:" + deviceId); } Device device = storager.queryVideoDevice(deviceId); SyncStatus syncStatus = deviceService.getChannelSyncStatus(deviceId); boolean status = deviceService.isSyncRunning(deviceId); // 已存在则返回进度 if (syncStatus != null && syncStatus.getErrorMsg() == null) { if (status) { WVPResult<SyncStatus> wvpResult = new WVPResult<>(); wvpResult.setCode(0); wvpResult.setData(syncStatus); SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId); wvpResult.setData(channelSyncStatus); return wvpResult; } SyncStatus syncStatusReady = new SyncStatus(); deviceService.setChannelSyncReady(deviceId); cmder.catalogQuery(device, event -> { String errorMsg = String.format("同步通道失败,错误码: %s, %s", event.statusCode, event.msg); deviceService.setChannelSyncEnd(deviceId, errorMsg); }); deviceService.sync(device); WVPResult<SyncStatus> wvpResult = new WVPResult<>(); wvpResult.setCode(0); wvpResult.setMsg("开始同步"); web_src/src/components/dialog/SyncChannelProgress.vue
@@ -61,14 +61,23 @@ if (!this.syncFlag) { this.syncFlag = true; } if (res.data.data == null) { if (res.data.data != null) { if (res.data.data.total == 0) { if (res.data.data.errorMsg !== null ){ this.msg = res.data.data.errorMsg; this.syncStatus = "exception" }else { this.msg = `等待同步中`; this.timmer = setTimeout(this.getProgress, 300) } }else { if (res.data.data.total == res.data.data.current) { this.syncStatus = "success" this.percentage = 100; this.msg = '同步成功'; }else if (res.data.data.total == 0){ this.msg = `等待同步中`; this.timmer = setTimeout(this.getProgress, 300) }else if (res.data.data.errorMsg !== null ){ }else { if (res.data.data.errorMsg !== null ){ this.msg = res.data.data.errorMsg; this.syncStatus = "exception" }else { @@ -78,6 +87,10 @@ this.msg = `同步中...[${res.data.data.current}/${res.data.data.total}]`; this.timmer = setTimeout(this.getProgress, 300) } } } } }else { if (this.syncFlag) { this.syncStatus = "success" web_src/src/components/dialog/catalogEdit.vue
@@ -13,11 +13,24 @@ <div id="shared" style="margin-top: 1rem;margin-right: 100px;"> <el-form ref="form" :rules="rules" :model="form" label-width="140px" > <el-form-item label="节点编号" prop="id" > <el-tooltip class="item" effect="dark" content="" placement="top-start"> <div slot="content"> 建议的类型: <br/>   行政区划(可选2位/4位/6位/8位/10位数字,例如:130432,表示河北省邯郸市广平县) <br/>   业务分组(第11、12、13位215,例如:34020000002150000001) <br/>   虚拟组织(第11、12、13位216,例如:34020000002160000001) </div> <el-input v-model="form.id" :disabled="isEdit"></el-input> </el-tooltip> </el-form-item> <el-form-item label="节点名称" prop="name"> <el-input v-model="form.name" clearable></el-input> </el-form-item> <el-form-item> <div style="float: right;"> <el-button type="primary" @click="onSubmit" >确认</el-button> web_src/src/components/dialog/deviceEdit.vue
@@ -45,6 +45,9 @@ <el-form-item v-if="form.subscribeCycleForMobilePosition > 0" label="移动位置报送间隔" prop="subscribeCycleForCatalog" > <el-input v-model="form.mobilePositionSubmissionInterval" clearable ></el-input> </el-form-item> <el-form-item label="其他选项"> <el-checkbox label="SSRC校验" v-model="form.ssrcCheck" style="float: left"></el-checkbox> </el-form-item> <el-form-item> <div style="float: right;"> <el-button type="primary" @click="onSubmit" >确认</el-button> web_src/src/components/dialog/platformEdit.vue
@@ -44,6 +44,9 @@ <el-form-item label="SIP认证用户名" prop="username"> <el-input v-model="platform.username"></el-input> </el-form-item> <el-form-item label="行政区划" prop="administrativeDivision"> <el-input v-model="platform.administrativeDivision" clearable></el-input> </el-form-item> <el-form-item label="SIP认证密码" prop="password"> <el-input v-model="platform.password" ></el-input> </el-form-item> @@ -63,6 +66,18 @@ <el-option label="TCP" value="TCP"></el-option> </el-select> </el-form-item> <el-form-item label="目录分组" prop="catalogGroup"> <el-select v-model="platform.catalogGroup" style="width: 100%" placeholder="请选择目录分组" > <el-option label="1" value="1"></el-option> <el-option label="2" value="2"></el-option> <el-option label="4" value="4"></el-option> <el-option label="8" value="8"></el-option> </el-select> </el-form-item> <el-form-item label="字符集" prop="characterSet"> <el-select v-model="platform.characterSet" @@ -77,6 +92,7 @@ <el-checkbox label="启用" v-model="platform.enable" @change="checkExpires"></el-checkbox> <el-checkbox label="云台控制" v-model="platform.ptz"></el-checkbox> <el-checkbox label="共享所有直播流" v-model="platform.shareAllLiveStream"></el-checkbox> <el-checkbox label="拉起离线推流" v-model="platform.startOfflinePush"></el-checkbox> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">{{ @@ -138,6 +154,9 @@ transport: "UDP", characterSet: "GB2312", shareAllLiveStream: false, startOfflinePush: false, catalogGroup: 1, administrativeDivision: null, }, rules: { name: [{ required: true, message: "请输入平台名称", trigger: "blur" }], @@ -175,6 +194,7 @@ that.platform.devicePort = res.data.devicePort; that.platform.username = res.data.username; that.platform.password = res.data.password; that.platform.administrativeDivision = res.data.username.substr(0, 6); }).catch(function (error) { console.log(error); }); @@ -199,6 +219,9 @@ this.platform.characterSet = platform.characterSet; this.platform.shareAllLiveStream = platform.shareAllLiveStream; this.platform.catalogId = platform.catalogId; this.platform.startOfflinePush = platform.startOfflinePush; this.platform.catalogGroup = platform.catalogGroup; this.platform.administrativeDivision = platform.administrativeDivision; this.onSubmit_text = "保存"; this.saveUrl = "/api/platform/save"; } @@ -213,6 +236,10 @@ deviceGBIdChange: function () { this.platform.username = this.platform.deviceGBId ; if (this.platform.administrativeDivision == null) { this.platform.administrativeDivision = this.platform.deviceGBId.substr(0, 6); } }, onSubmit: function () { var that = this; @@ -253,6 +280,7 @@ rtcp: false, name: null, serverGBId: null, administrativeDivision: null, serverGBDomain: null, serverIP: null, serverPort: null, @@ -266,6 +294,8 @@ transport: "UDP", characterSet: "GB2312", shareAllLiveStream: false, startOfflinePush: false, catalogGroup: 1, } }, deviceGBIdExit: async function (deviceGbId) {