From a53dce38c2f58c0bfd37203e46dc57aa56025f45 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 17 十一月 2022 18:22:24 +0800
Subject: [PATCH] Merge pull request #673 from 648540858/wvp-28181-2.0-multi-network
---
src/main/java/com/genersoft/iot/vmp/common/StreamURL.java | 80 ++
src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java | 550 ++++++++-----
src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java | 3
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java | 147 +-
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java | 7
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java | 10
src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java | 7
src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java | 10
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java | 37
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 2
src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java | 10
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 2
src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java | 6
src/main/java/com/genersoft/iot/vmp/service/IPlayService.java | 7
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java | 68 +
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java | 37
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 118 +-
web_src/src/components/live.vue | 4
src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java | 7
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java | 30
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 5
sql/update.sql | 3
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 15
src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java | 11
src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java | 10
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 147 +-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 1
src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java | 2
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java | 40
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 246 +++---
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 12
web_src/src/components/dialog/devicePlayer.vue | 90 +-
src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java | 2
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 2
src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java | 7
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java | 3
src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java | 29
src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultFilter.java | 6
src/main/resources/all-application.yml | 4
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 75 +
src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java | 38
src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultEx.java | 31
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 161 ++-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 3
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 62
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 79 +
49 files changed, 1,324 insertions(+), 910 deletions(-)
diff --git a/sql/update.sql b/sql/update.sql
index 1a72b80..405cb3a 100644
--- a/sql/update.sql
+++ b/sql/update.sql
@@ -17,6 +17,9 @@
add sdpIp varchar(50) default null;
alter table device
+ add localIp varchar(50) default null;
+
+alter table device
add password varchar(255) default null;
alter table device
diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
index 93d837c..460f418 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
@@ -2,8 +2,10 @@
import io.swagger.v3.oas.annotations.media.Schema;
+import java.io.Serializable;
+
@Schema(description = "娴佷俊鎭�")
-public class StreamInfo {
+public class StreamInfo implements Serializable, Cloneable{
@Schema(description = "搴旂敤鍚�")
private String app;
@@ -13,54 +15,56 @@
private String deviceID;
@Schema(description = "閫氶亾缂栧彿")
private String channelId;
- @Schema(description = "HTTP-FLV娴佸湴鍧�")
- private String flv;
@Schema(description = "IP")
private String ip;
+
+ @Schema(description = "HTTP-FLV娴佸湴鍧�")
+ private StreamURL flv;
+
@Schema(description = "HTTPS-FLV娴佸湴鍧�")
- private String https_flv;
+ private StreamURL https_flv;
@Schema(description = "Websocket-FLV娴佸湴鍧�")
- private String ws_flv;
+ private StreamURL ws_flv;
@Schema(description = "Websockets-FLV娴佸湴鍧�")
- private String wss_flv;
+ private StreamURL wss_flv;
@Schema(description = "HTTP-FMP4娴佸湴鍧�")
- private String fmp4;
+ private StreamURL fmp4;
@Schema(description = "HTTPS-FMP4娴佸湴鍧�")
- private String https_fmp4;
+ private StreamURL https_fmp4;
@Schema(description = "Websocket-FMP4娴佸湴鍧�")
- private String ws_fmp4;
+ private StreamURL ws_fmp4;
@Schema(description = "Websockets-FMP4娴佸湴鍧�")
- private String wss_fmp4;
+ private StreamURL wss_fmp4;
@Schema(description = "HLS娴佸湴鍧�")
- private String hls;
+ private StreamURL hls;
@Schema(description = "HTTPS-HLS娴佸湴鍧�")
- private String https_hls;
+ private StreamURL https_hls;
@Schema(description = "Websocket-HLS娴佸湴鍧�")
- private String ws_hls;
+ private StreamURL ws_hls;
@Schema(description = "Websockets-HLS娴佸湴鍧�")
- private String wss_hls;
+ private StreamURL wss_hls;
@Schema(description = "HTTP-TS娴佸湴鍧�")
- private String ts;
+ private StreamURL ts;
@Schema(description = "HTTPS-TS娴佸湴鍧�")
- private String https_ts;
+ private StreamURL https_ts;
@Schema(description = "Websocket-TS娴佸湴鍧�")
- private String ws_ts;
+ private StreamURL ws_ts;
@Schema(description = "Websockets-TS娴佸湴鍧�")
- private String wss_ts;
+ private StreamURL wss_ts;
@Schema(description = "RTMP娴佸湴鍧�")
- private String rtmp;
+ private StreamURL rtmp;
@Schema(description = "RTMPS娴佸湴鍧�")
- private String rtmps;
+ private StreamURL rtmps;
@Schema(description = "RTSP娴佸湴鍧�")
- private String rtsp;
+ private StreamURL rtsp;
@Schema(description = "RTSPS娴佸湴鍧�")
- private String rtsps;
+ private StreamURL rtsps;
@Schema(description = "RTC娴佸湴鍧�")
- private String rtc;
+ private StreamURL rtc;
@Schema(description = "RTCS娴佸湴鍧�")
- private String rtcs;
+ private StreamURL rtcs;
@Schema(description = "娴佸獟浣揑D")
private String mediaServerId;
@Schema(description = "娴佺紪鐮佷俊鎭�")
@@ -74,6 +78,190 @@
@Schema(description = "鏄惁鏆傚仠锛堝綍鍍忓洖鏀句娇鐢級")
private boolean pause;
+
+ public void setFlv(StreamURL flv) {
+ this.flv = flv;
+ }
+
+ public void setHttps_flv(StreamURL https_flv) {
+ this.https_flv = https_flv;
+ }
+
+ public void setWs_flv(StreamURL ws_flv) {
+ this.ws_flv = ws_flv;
+ }
+
+ public void setWss_flv(StreamURL wss_flv) {
+ this.wss_flv = wss_flv;
+ }
+
+ public void setFmp4(StreamURL fmp4) {
+ this.fmp4 = fmp4;
+ }
+
+ public void setHttps_fmp4(StreamURL https_fmp4) {
+ this.https_fmp4 = https_fmp4;
+ }
+
+ public void setWs_fmp4(StreamURL ws_fmp4) {
+ this.ws_fmp4 = ws_fmp4;
+ }
+
+ public void setWss_fmp4(StreamURL wss_fmp4) {
+ this.wss_fmp4 = wss_fmp4;
+ }
+
+ public void setHls(StreamURL hls) {
+ this.hls = hls;
+ }
+
+ public void setHttps_hls(StreamURL https_hls) {
+ this.https_hls = https_hls;
+ }
+
+ public void setWs_hls(StreamURL ws_hls) {
+ this.ws_hls = ws_hls;
+ }
+
+ public void setWss_hls(StreamURL wss_hls) {
+ this.wss_hls = wss_hls;
+ }
+
+ public void setTs(StreamURL ts) {
+ this.ts = ts;
+ }
+
+ public void setHttps_ts(StreamURL https_ts) {
+ this.https_ts = https_ts;
+ }
+
+ public void setWs_ts(StreamURL ws_ts) {
+ this.ws_ts = ws_ts;
+ }
+
+ public void setWss_ts(StreamURL wss_ts) {
+ this.wss_ts = wss_ts;
+ }
+
+ public void setRtmp(StreamURL rtmp) {
+ this.rtmp = rtmp;
+ }
+
+ public void setRtmps(StreamURL rtmps) {
+ this.rtmps = rtmps;
+ }
+
+ public void setRtsp(StreamURL rtsp) {
+ this.rtsp = rtsp;
+ }
+
+ public void setRtsps(StreamURL rtsps) {
+ this.rtsps = rtsps;
+ }
+
+ public void setRtc(StreamURL rtc) {
+ this.rtc = rtc;
+ }
+
+ public void setRtcs(StreamURL rtcs) {
+ this.rtcs = rtcs;
+ }
+
+ public void setRtmp(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("%s/%s/%s", app, stream, callIdParam);
+ this.rtmp = new StreamURL("rtmp", host, port, file);
+ if (sslPort != 0) {
+ this.rtmps = new StreamURL("rtmps", host, sslPort, file);
+ }
+ }
+
+ public void setRtsp(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("%s/%s/%s", app, stream, callIdParam);
+ this.rtsp = new StreamURL("rtsp", host, port, file);
+ if (sslPort != 0) {
+ this.rtsps = new StreamURL("rtsps", host, sslPort, file);
+ }
+ }
+
+ public void setFlv(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("%s/%s.live.flv%s", app, stream, callIdParam);
+ this.flv = new StreamURL("http", host, port, file);
+ this.ws_flv = new StreamURL("ws", host, port, file);
+ if (sslPort != 0) {
+ this.https_flv = new StreamURL("https", host, sslPort, file);
+ this.wss_flv = new StreamURL("wss", host, sslPort, file);
+ }
+ }
+
+ public void setFmp4(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("%s/%s.live.mp4%s", app, stream, callIdParam);
+ this.fmp4 = new StreamURL("http", host, port, file);
+ this.ws_fmp4 = new StreamURL("ws", host, port, file);
+ if (sslPort != 0) {
+ this.https_fmp4 = new StreamURL("https", host, sslPort, file);
+ this.wss_fmp4 = new StreamURL("wss", host, sslPort, file);
+ }
+ }
+
+ public void setHls(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("%s/%s/hls.m3u8%s", app, stream, callIdParam);
+ this.hls = new StreamURL("http", host, port, file);
+ this.ws_hls = new StreamURL("ws", host, port, file);
+ if (sslPort != 0) {
+ this.https_hls = new StreamURL("https", host, sslPort, file);
+ this.wss_hls = new StreamURL("wss", host, sslPort, file);
+ }
+ }
+
+ public void setTs(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("%s/%s.live.ts%s", app, stream, callIdParam);
+ this.ts = new StreamURL("http", host, port, file);
+ this.ws_ts = new StreamURL("ws", host, port, file);
+ if (sslPort != 0) {
+ this.https_ts = new StreamURL("https", host, sslPort, file);
+ this.wss_ts = new StreamURL("wss", host, sslPort, file);
+ }
+ }
+
+ public void setRtc(String host, int port, int sslPort, String app, String stream, String callIdParam) {
+ String file = String.format("index/api/webrtc?app=%s&stream=%s&type=play%s", app, stream, callIdParam);
+ this.rtc = new StreamURL("http", host, port, file);
+ if (sslPort != 0) {
+ this.rtcs = new StreamURL("https", host, sslPort, file);
+ }
+ }
+
+ public void channgeStreamIp(String localAddr) {
+ this.flv.setHost(localAddr);
+ this.ws_flv.setHost(localAddr);
+ this.hls.setHost(localAddr);
+ this.ws_hls.setHost(localAddr);
+ this.ts.setHost(localAddr);
+ this.ws_ts.setHost(localAddr);
+ this.fmp4.setHost(localAddr);
+ this.ws_fmp4.setHost(localAddr);
+ this.rtc.setHost(localAddr);
+ if (this.https_flv != null) {
+ this.https_flv.setHost(localAddr);
+ this.wss_flv.setHost(localAddr);
+ this.https_hls.setHost(localAddr);
+ this.wss_hls.setHost(localAddr);
+ this.wss_ts.setHost(localAddr);
+ this.https_fmp4.setHost(localAddr);
+ this.wss_fmp4.setHost(localAddr);
+ this.rtcs.setHost(localAddr);
+ }
+ this.rtsp.setHost(localAddr);
+ if (this.rtsps != null) {
+ this.rtsps.setHost(localAddr);
+ }
+ this.rtmp.setHost(localAddr);
+ if (this.rtmps != null) {
+ this.rtmps.setHost(localAddr);
+ }
+
+ }
+
public static class TransactionInfo{
public String callId;
@@ -108,94 +296,6 @@
this.channelId = channelId;
}
- public String getFlv() {
- return flv;
- }
-
- public void setFlv(String flv) {
- this.flv = flv;
- }
-
- public String getWs_flv() {
- return ws_flv;
- }
-
- public void setWs_flv(String ws_flv) {
- this.ws_flv = ws_flv;
- }
-
- public String getRtmp() {
- return rtmp;
- }
-
- public void setRtmp(String rtmp) {
- this.rtmp = rtmp;
- }
-
- public String getHls() {
- return hls;
- }
-
- public void setHls(String hls) {
- this.hls = hls;
- }
-
- public String getRtsp() {
- return rtsp;
- }
-
- public void setRtsp(String rtsp) {
- this.rtsp = rtsp;
- }
-
- public Object getTracks() {
- return tracks;
- }
-
- public void setTracks(Object tracks) {
- this.tracks = tracks;
- }
-
- public String getFmp4() {
- return fmp4;
- }
-
- public void setFmp4(String fmp4) {
- this.fmp4 = fmp4;
- }
-
- public String getWs_fmp4() {
- return ws_fmp4;
- }
-
- public void setWs_fmp4(String ws_fmp4) {
- this.ws_fmp4 = ws_fmp4;
- }
-
- public String getWs_hls() {
- return ws_hls;
- }
-
- public void setWs_hls(String ws_hls) {
- this.ws_hls = ws_hls;
- }
-
- public String getTs() {
- return ts;
- }
-
- public void setTs(String ts) {
- this.ts = ts;
- }
-
- public String getWs_ts() {
- return ws_ts;
- }
-
- public void setWs_ts(String ws_ts) {
- this.ws_ts = ws_ts;
- }
-
public String getStream() {
return stream;
}
@@ -204,20 +304,108 @@
this.stream = stream;
}
- public String getRtc() {
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public StreamURL getFlv() {
+ return flv;
+ }
+
+ public StreamURL getHttps_flv() {
+ return https_flv;
+ }
+
+ public StreamURL getWs_flv() {
+ return ws_flv;
+ }
+
+
+ public StreamURL getWss_flv() {
+ return wss_flv;
+ }
+
+ public StreamURL getFmp4() {
+ return fmp4;
+ }
+
+
+
+ public StreamURL getHttps_fmp4() {
+ return https_fmp4;
+ }
+
+ public StreamURL getWs_fmp4() {
+ return ws_fmp4;
+ }
+
+ public StreamURL getWss_fmp4() {
+ return wss_fmp4;
+ }
+
+ public StreamURL getHls() {
+ return hls;
+ }
+
+
+ public StreamURL getHttps_hls() {
+ return https_hls;
+ }
+
+ public StreamURL getWs_hls() {
+ return ws_hls;
+ }
+
+ public StreamURL getWss_hls() {
+ return wss_hls;
+ }
+
+ public StreamURL getTs() {
+ return ts;
+ }
+
+
+ public StreamURL getHttps_ts() {
+ return https_ts;
+ }
+
+
+ public StreamURL getWs_ts() {
+ return ws_ts;
+ }
+
+
+ public StreamURL getWss_ts() {
+ return wss_ts;
+ }
+
+
+ public StreamURL getRtmp() {
+ return rtmp;
+ }
+
+ public StreamURL getRtmps() {
+ return rtmps;
+ }
+
+ public StreamURL getRtsp() {
+ return rtsp;
+ }
+
+ public StreamURL getRtsps() {
+ return rtsps;
+ }
+
+ public StreamURL getRtc() {
return rtc;
}
- public void setRtc(String rtc) {
- this.rtc = rtc;
- }
-
- public TransactionInfo getTransactionInfo() {
- return transactionInfo;
- }
-
- public void setTransactionInfo(TransactionInfo transactionInfo) {
- this.transactionInfo = transactionInfo;
+ public StreamURL getRtcs() {
+ return rtcs;
}
public String getMediaServerId() {
@@ -228,86 +416,13 @@
this.mediaServerId = mediaServerId;
}
- public String getHttps_flv() {
- return https_flv;
+ public Object getTracks() {
+ return tracks;
}
- public void setHttps_flv(String https_flv) {
- this.https_flv = https_flv;
+ public void setTracks(Object tracks) {
+ this.tracks = tracks;
}
-
- public String getWss_flv() {
- return wss_flv;
- }
-
- public void setWss_flv(String wss_flv) {
- this.wss_flv = wss_flv;
- }
-
- public String getWss_fmp4() {
- return wss_fmp4;
- }
-
- public void setWss_fmp4(String wss_fmp4) {
- this.wss_fmp4 = wss_fmp4;
- }
-
- public String getWss_hls() {
- return wss_hls;
- }
-
- public void setWss_hls(String wss_hls) {
- this.wss_hls = wss_hls;
- }
-
- public String getWss_ts() {
- return wss_ts;
- }
-
- public void setWss_ts(String wss_ts) {
- this.wss_ts = wss_ts;
- }
-
- public String getRtmps() {
- return rtmps;
- }
-
- public void setRtmps(String rtmps) {
- this.rtmps = rtmps;
- }
-
- public String getRtsps() {
- return rtsps;
- }
-
- public void setRtsps(String rtsps) {
- this.rtsps = rtsps;
- }
-
- public String getHttps_hls() {
- return https_hls;
- }
-
- public void setHttps_hls(String https_hls) {
- this.https_hls = https_hls;
- }
-
- public String getHttps_fmp4() {
- return https_fmp4;
- }
-
- public void setHttps_fmp4(String https_fmp4) {
- this.https_fmp4 = https_fmp4;
- }
-
- public String getHttps_ts() {
- return https_ts;
- }
-
- public void setHttps_ts(String https_ts) {
- this.https_ts = https_ts;
- }
-
public String getStartTime() {
return startTime;
@@ -333,22 +448,6 @@
this.progress = progress;
}
- public String getIp() {
- return ip;
- }
-
- public void setIp(String ip) {
- this.ip = ip;
- }
-
- public String getRtcs() {
- return rtcs;
- }
-
- public void setRtcs(String rtcs) {
- this.rtcs = rtcs;
- }
-
public boolean isPause() {
return pause;
}
@@ -356,4 +455,23 @@
public void setPause(boolean pause) {
this.pause = pause;
}
+
+ public TransactionInfo getTransactionInfo() {
+ return transactionInfo;
+ }
+
+ public void setTransactionInfo(TransactionInfo transactionInfo) {
+ this.transactionInfo = transactionInfo;
+ }
+
+ @Override
+ public StreamInfo clone() {
+ StreamInfo instance = null;
+ try{
+ instance = (StreamInfo)super.clone();
+ }catch(CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ return instance;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java b/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java
new file mode 100644
index 0000000..eecf469
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java
@@ -0,0 +1,80 @@
+package com.genersoft.iot.vmp.common;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.io.Serializable;
+
+
+@Schema(description = "娴佸湴鍧�淇℃伅")
+public class StreamURL implements Serializable {
+
+ @Schema(description = "鍗忚")
+ private String protocol;
+
+ @Schema(description = "涓绘満鍦板潃")
+ private String host;
+
+ @Schema(description = "绔彛")
+ private int port = -1;
+
+ @Schema(description = "瀹氫綅浣嶇疆")
+ private String file;
+
+ @Schema(description = "鎷兼帴鍚庣殑鍦板潃")
+ private String url;
+
+ public StreamURL() {
+ }
+
+ public StreamURL(String protocol, String host, int port, String file) {
+ this.protocol = protocol;
+ this.host = host;
+ this.port = port;
+ this.file = file;
+ }
+
+ public String getProtocol() {
+ return protocol;
+ }
+
+ public void setProtocol(String protocol) {
+ this.protocol = protocol;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+ public String getFile() {
+ return file;
+ }
+
+ public void setFile(String file) {
+ this.file = file;
+ }
+
+ public String getUrl() {
+ return this.toString();
+ }
+
+ @Override
+ public String toString() {
+ if (protocol != null && host != null && port != -1 ) {
+ return String.format("%s://%s:%s/%s", protocol, host, port, file);
+ }else {
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
index 9ca936c..041d738 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
@@ -127,11 +127,15 @@
public void execute(){
if (futureMap.size() > 0) {
for (String key : futureMap.keySet()) {
- if (futureMap.get(key).isDone()) {
+ if (futureMap.get(key).isDone() || futureMap.get(key).isCancelled()) {
futureMap.remove(key);
runnableMap.remove(key);
}
}
}
}
+
+ public boolean isAlive(String key) {
+ return futureMap.get(key) != null && !futureMap.get(key).isDone() && !futureMap.get(key).isCancelled();
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
index 29b2d8d..fe535bf 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
@@ -25,7 +25,7 @@
@Value("${media.ip}")
private String ip;
- @Value("${media.hook-ip:${sip.ip}}")
+ @Value("${media.hook-ip:}")
private String hookIp;
@Value("${sip.ip}")
@@ -86,7 +86,7 @@
public String getHookIp() {
if (ObjectUtils.isEmpty(hookIp)){
- return sipIp;
+ return sipIp.split(",")[0];
}else {
return hookIp;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
index bbc946b..4790fa4 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
@@ -3,17 +3,13 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
@Component
@ConfigurationProperties(prefix = "sip", ignoreInvalidFields = true)
public class SipConfig {
private String ip;
-
- /**
- * 榛樿浣跨敤 0.0.0.0
- */
- private String monitorIp = "0.0.0.0";
private Integer port;
@@ -25,18 +21,12 @@
Integer ptzSpeed = 50;
- Integer keepaliveTimeOut = 255;
-
Integer registerTimeInterval = 120;
private boolean alarm;
public void setIp(String ip) {
this.ip = ip;
- }
-
- public void setMonitorIp(String monitorIp) {
- this.monitorIp = monitorIp;
}
public void setPort(Integer port) {
@@ -59,16 +49,9 @@
this.ptzSpeed = ptzSpeed;
}
- public void setKeepaliveTimeOut(Integer keepaliveTimeOut) {
- this.keepaliveTimeOut = keepaliveTimeOut;
- }
public void setRegisterTimeInterval(Integer registerTimeInterval) {
this.registerTimeInterval = registerTimeInterval;
- }
-
- public String getMonitorIp() {
- return monitorIp;
}
public String getIp() {
@@ -99,10 +82,6 @@
return ptzSpeed;
}
- public Integer getKeepaliveTimeOut() {
- return keepaliveTimeOut;
- }
-
public Integer getRegisterTimeInterval() {
return registerTimeInterval;
}
@@ -114,4 +93,10 @@
public void setAlarm(boolean alarm) {
this.alarm = alarm;
}
+
+ public void getLocalIp(String deviceLocalIp) {
+ if (ObjectUtils.isEmpty(deviceLocalIp)) {
+
+ }
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
index 0dfa968..15e38ae 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
@@ -2,7 +2,6 @@
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
-import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.service.IPlatformService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -47,7 +46,7 @@
parentPlatformCatch.setId(parentPlatform.getServerGBId());
redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
// 璁剧疆鎵�鏈夊钩鍙扮绾�
- platformService.offline(parentPlatform);
+ platformService.offline(parentPlatform, true);
// 鍙栨秷璁㈤槄
sipCommanderForPlatform.unregister(parentPlatform, null, (eventResult)->{
platformService.login(parentPlatform);
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
index 9f5fbae..ca204d9 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
@@ -33,6 +33,8 @@
private Boolean usePushingAsStatus = Boolean.TRUE;
+ private Boolean useSourceIpAsStreamIp = Boolean.FALSE;
+
private Boolean streamOnDemand = Boolean.TRUE;
private Boolean pushAuthority = Boolean.TRUE;
@@ -161,6 +163,14 @@
this.streamOnDemand = streamOnDemand;
}
+ public Boolean getUseSourceIpAsStreamIp() {
+ return useSourceIpAsStreamIp;
+ }
+
+ public void setUseSourceIpAsStreamIp(Boolean useSourceIpAsStreamIp) {
+ this.useSourceIpAsStreamIp = useSourceIpAsStreamIp;
+ }
+
public Boolean getPushAuthority() {
return pushAuthority;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
index 6cd1924..13fa01d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -8,16 +8,18 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.DependsOn;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
import javax.sip.*;
-import java.util.Properties;
-import java.util.TooManyListenersException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
-@Configuration
-public class SipLayer{
+@Component
+@Order(value=1)
+public class SipLayer implements CommandLineRunner {
private final static Logger logger = LoggerFactory.getLogger(SipLayer.class);
@@ -27,70 +29,117 @@
@Autowired
private ISIPProcessorObserver sipProcessorObserver;
- private SipStackImpl sipStack;
+
+
+ private final Map<String, SipProviderImpl> tcpSipProviderMap = new ConcurrentHashMap<>();
+ private final Map<String, SipProviderImpl> udpSipProviderMap = new ConcurrentHashMap<>();
private SipFactory sipFactory;
+ @Override
+ public void run(String... args) {
+ List<String> monitorIps = new ArrayList<>();
+ // 浣跨敤閫楀彿鍒嗗壊澶氫釜ip
+ String separator = ",";
+ if (sipConfig.getIp().indexOf(separator) > 0) {
+ String[] split = sipConfig.getIp().split(separator);
+ monitorIps.addAll(Arrays.asList(split));
+ }else {
+ monitorIps.add(sipConfig.getIp());
+ }
- @Bean("sipFactory")
- SipFactory createSipFactory() {
sipFactory = SipFactory.getInstance();
sipFactory.setPathName("gov.nist");
- return sipFactory;
- }
-
- @Bean("sipStack")
- @DependsOn({"sipFactory"})
- SipStackImpl createSipStack() throws PeerUnavailableException {
- sipStack = ( SipStackImpl )sipFactory.createSipStack(DefaultProperties.getProperties(sipConfig.getMonitorIp(), false));
- return sipStack;
+ if (monitorIps.size() > 0) {
+ for (String monitorIp : monitorIps) {
+ addListeningPoint(monitorIp, sipConfig.getPort());
+ }
+ if (udpSipProviderMap.size() + tcpSipProviderMap.size() == 0) {
+ System.exit(1);
+ }
+ }
}
- @Bean(name = "tcpSipProvider")
- @DependsOn("sipStack")
- SipProviderImpl startTcpListener() {
- ListeningPoint tcpListeningPoint = null;
- SipProviderImpl tcpSipProvider = null;
+ private void addListeningPoint(String monitorIp, int port){
+ SipStackImpl sipStack;
try {
- tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "TCP");
- tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
+ sipStack = (SipStackImpl)sipFactory.createSipStack(DefaultProperties.getProperties(monitorIp, false));
+ } catch (PeerUnavailableException e) {
+ logger.error("[Sip Server] SIP鏈嶅姟鍚姩澶辫触锛� 鐩戝惉鍦板潃{}澶辫触,璇锋鏌p鏄惁姝g‘", monitorIp);
+ return;
+ }
+
+ try {
+ ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(monitorIp, port, "TCP");
+ SipProviderImpl tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
+
tcpSipProvider.setDialogErrorsAutomaticallyHandled();
tcpSipProvider.addSipListener(sipProcessorObserver);
- logger.info("[Sip Server] TCP 鍚姩鎴愬姛 {}:{}", sipConfig.getMonitorIp(), sipConfig.getPort());
- } catch (TransportNotSupportedException e) {
- e.printStackTrace();
- } catch (InvalidArgumentException e) {
- logger.error("[Sip Server] 鏃犳硶浣跨敤 [ {}:{} ]浣滀负SIP[ TCP ]鏈嶅姟锛屽彲鎺掓煡: 1. sip.monitor-ip 鏄惁涓烘湰鏈虹綉鍗P; 2. sip.port 鏄惁宸茶鍗犵敤"
- , sipConfig.getMonitorIp(), sipConfig.getPort());
- } catch (TooManyListenersException e) {
- e.printStackTrace();
- } catch (ObjectInUseException e) {
- e.printStackTrace();
+ tcpSipProviderMap.put(monitorIp, tcpSipProvider);
+
+ logger.info("[Sip Server] tcp://{}:{} 鍚姩鎴愬姛", monitorIp, port);
+ } catch (TransportNotSupportedException
+ | TooManyListenersException
+ | ObjectInUseException
+ | InvalidArgumentException e) {
+ logger.error("[Sip Server] tcp://{}:{} SIP鏈嶅姟鍚姩澶辫触,璇锋鏌ョ鍙f槸鍚﹁鍗犵敤鎴栬�卛p鏄惁姝g‘"
+ , monitorIp, port);
}
- return tcpSipProvider;
- }
-
- @Bean(name = "udpSipProvider")
- @DependsOn("sipStack")
- SipProviderImpl startUdpListener() {
- ListeningPoint udpListeningPoint = null;
- SipProviderImpl udpSipProvider = null;
+
try {
- udpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "UDP");
- udpSipProvider = (SipProviderImpl)sipStack.createSipProvider(udpListeningPoint);
+ ListeningPoint udpListeningPoint = sipStack.createListeningPoint(monitorIp, port, "UDP");
+
+ SipProviderImpl udpSipProvider = (SipProviderImpl)sipStack.createSipProvider(udpListeningPoint);
udpSipProvider.addSipListener(sipProcessorObserver);
- } catch (TransportNotSupportedException e) {
- e.printStackTrace();
- } catch (InvalidArgumentException e) {
- logger.error("[Sip Server] 鏃犳硶浣跨敤 [ {}:{} ]浣滀负SIP[ UDP ]鏈嶅姟锛屽彲鎺掓煡: 1. sip.monitor-ip 鏄惁涓烘湰鏈虹綉鍗P; 2. sip.port 鏄惁宸茶鍗犵敤"
- , sipConfig.getMonitorIp(), sipConfig.getPort());
- } catch (TooManyListenersException e) {
- e.printStackTrace();
- } catch (ObjectInUseException e) {
- e.printStackTrace();
+
+ udpSipProviderMap.put(monitorIp, udpSipProvider);
+
+ logger.info("[Sip Server] udp://{}:{} 鍚姩鎴愬姛", monitorIp, port);
+ } catch (TransportNotSupportedException
+ | TooManyListenersException
+ | ObjectInUseException
+ | InvalidArgumentException e) {
+ logger.error("[Sip Server] udp://{}:{} SIP鏈嶅姟鍚姩澶辫触,璇锋鏌ョ鍙f槸鍚﹁鍗犵敤鎴栬�卛p鏄惁姝g‘"
+ , monitorIp, port);
}
- logger.info("[Sip Server] UDP 鍚姩鎴愬姛 {}:{}", sipConfig.getMonitorIp(), sipConfig.getPort());
- return udpSipProvider;
}
+ public SipFactory getSipFactory() {
+ return sipFactory;
+ }
+
+ public SipProviderImpl getUdpSipProvider(String ip) {
+ if (ObjectUtils.isEmpty(ip)) {
+ return null;
+ }
+ return udpSipProviderMap.get(ip);
+ }
+
+ public SipProviderImpl getUdpSipProvider() {
+ if (udpSipProviderMap.size() != 1) {
+ return null;
+ }
+ return udpSipProviderMap.values().stream().findFirst().get();
+ }
+
+ public SipProviderImpl getTcpSipProvider() {
+ if (tcpSipProviderMap.size() != 1) {
+ return null;
+ }
+ return tcpSipProviderMap.values().stream().findFirst().get();
+ }
+
+ public SipProviderImpl getTcpSipProvider(String ip) {
+ if (ObjectUtils.isEmpty(ip)) {
+ return null;
+ }
+ return tcpSipProviderMap.get(ip);
+ }
+
+ public String getLocalIp(String deviceLocalIp) {
+ if (!ObjectUtils.isEmpty(deviceLocalIp)) {
+ return deviceLocalIp;
+ }
+ return getUdpSipProvider().getListeningPoint().getIPAddress();
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
index 9dd046b..36b84ff 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
@@ -178,6 +178,9 @@
@Schema(description = "鏀舵祦IP")
private String sdpIp;
+ @Schema(description = "SIP浜や簰IP锛堣澶囪闂钩鍙扮殑IP锛�")
+ private String localIp;
+
public String getDeviceId() {
return deviceId;
@@ -402,4 +405,12 @@
public void setSdpIp(String sdpIp) {
this.sdpIp = sdpIp;
}
+
+ public String getLocalIp() {
+ return localIp;
+ }
+
+ public void setLocalIp(String localIp) {
+ this.localIp = localIp;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
index aeca07a..5c2abb2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
@@ -5,11 +5,9 @@
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-import java.util.HashMap;
-import java.util.Hashtable;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/**
* @description: 褰曞儚鏌ヨ缁撴潫浜嬩欢
@@ -22,13 +20,12 @@
private final static Logger logger = LoggerFactory.getLogger(RecordEndEventListener.class);
- private static Map<String, SseEmitter> sseEmitters = new Hashtable<>();
-
public interface RecordEndEventHandler{
void handler(RecordInfo recordInfo);
}
- private Map<String, RecordEndEventHandler> handlerMap = new HashMap<>();
+ private Map<String, RecordEndEventHandler> handlerMap = new ConcurrentHashMap<>();
+
@Override
public void onApplicationEvent(RecordEndEvent event) {
logger.info("褰曞儚鏌ヨ瀹屾垚浜嬩欢瑙﹀彂锛宒eviceId锛歿}, channelId: {}, 褰曞儚鏁伴噺{}鏉�", event.getRecordInfo().getDeviceId(),
@@ -38,7 +35,6 @@
recordEndEventHandler.handler(event.getRecordInfo());
}
}
-
}
public void addEndEventHandler(String device, String channelId, RecordEndEventHandler recordEndEventHandler) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
index 1252adb..52356c1 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
@@ -5,6 +5,7 @@
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.response.ISIPResponseProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.timeout.ITimeoutProcessor;
+import gov.nist.javax.sip.message.SIPRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +16,7 @@
import javax.sip.header.*;
import javax.sip.message.Request;
import javax.sip.message.Response;
+import java.net.InetAddress;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -75,6 +77,7 @@
ISIPRequestProcessor sipRequestProcessor = requestProcessorMap.get(method);
if (sipRequestProcessor == null) {
logger.warn("涓嶆敮鎸佹柟娉晎}鐨剅equest", method);
+ // TODO 鍥炲閿欒鐜�
return;
}
requestProcessorMap.get(method).process(requestEvent);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
index 72831cf..0aff21d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.gb28181.transmit;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import com.genersoft.iot.vmp.utils.GitUtil;
@@ -7,11 +8,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
import javax.sip.SipException;
-import javax.sip.SipFactory;
import javax.sip.header.CallIdHeader;
import javax.sip.header.UserAgentHeader;
import javax.sip.header.ViaHeader;
@@ -30,15 +30,7 @@
private final Logger logger = LoggerFactory.getLogger(SIPSender.class);
@Autowired
- @Qualifier(value = "tcpSipProvider")
- private SipProviderImpl tcpSipProvider;
-
- @Autowired
- @Qualifier(value = "udpSipProvider")
- private SipProviderImpl udpSipProvider;
-
- @Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private GitUtil gitUtil;
@@ -46,25 +38,25 @@
@Autowired
private SipSubscribe sipSubscribe;
- public void transmitRequest(Message message) throws SipException, ParseException {
- transmitRequest(message, null, null);
+ public void transmitRequest(String ip, Message message) throws SipException, ParseException {
+ transmitRequest(ip, message, null, null);
}
- public void transmitRequest(Message message, SipSubscribe.Event errorEvent) throws SipException, ParseException {
- transmitRequest(message, errorEvent, null);
+ public void transmitRequest(String ip, Message message, SipSubscribe.Event errorEvent) throws SipException, ParseException {
+ transmitRequest(ip, message, errorEvent, null);
}
- public void transmitRequest(Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
+ public void transmitRequest(String ip, Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
ViaHeader viaHeader = (ViaHeader)message.getHeader(ViaHeader.NAME);
String transport = "UDP";
if (viaHeader == null) {
- logger.warn("[娑堟伅澶寸己澶盷锛� ViaHeader");
+ logger.warn("[娑堟伅澶寸己澶盷锛� ViaHeader锛� 浣跨敤榛樿鐨刄DP鏂瑰紡澶勭悊鏁版嵁");
}else {
transport = viaHeader.getTransport();
}
if (message.getHeader(UserAgentHeader.NAME) == null) {
try {
- message.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ message.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
} catch (ParseException e) {
logger.error("娣诲姞UserAgentHeader澶辫触", e);
}
@@ -88,6 +80,11 @@
});
}
if ("TCP".equals(transport)) {
+ SipProviderImpl tcpSipProvider = sipLayer.getTcpSipProvider(ip);
+ if (tcpSipProvider == null) {
+ logger.error("[鍙戦�佷俊鎭け璐 鏈壘鍒皌cp://{}鐨勭洃鍚俊鎭�", ip);
+ return;
+ }
if (message instanceof Request) {
tcpSipProvider.sendRequest((Request)message);
}else if (message instanceof Response) {
@@ -95,16 +92,41 @@
}
} else if ("UDP".equals(transport)) {
+ SipProviderImpl sipProvider = sipLayer.getUdpSipProvider(ip);
+ if (sipProvider == null) {
+ logger.error("[鍙戦�佷俊鎭け璐 鏈壘鍒皍dp://{}鐨勭洃鍚俊鎭�", ip);
+ return;
+ }
if (message instanceof Request) {
- udpSipProvider.sendRequest((Request)message);
+ sipProvider.sendRequest((Request)message);
}else if (message instanceof Response) {
- udpSipProvider.sendResponse((Response)message);
+ sipProvider.sendResponse((Response)message);
}
}
}
- public CallIdHeader getNewCallIdHeader(String transport){
- return transport.equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
- : udpSipProvider.getNewCallId();
+ public CallIdHeader getNewCallIdHeader(String ip, String transport){
+ if (ObjectUtils.isEmpty(transport)) {
+ return sipLayer.getUdpSipProvider().getNewCallId();
+ }
+ SipProviderImpl sipProvider;
+ if (ObjectUtils.isEmpty(ip)) {
+ sipProvider = transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider()
+ : sipLayer.getUdpSipProvider();
+ }else {
+ sipProvider = transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider(ip)
+ : sipLayer.getUdpSipProvider(ip);
+ }
+
+ if (sipProvider == null) {
+ sipProvider = sipLayer.getUdpSipProvider();
+ }
+
+ if (sipProvider != null) {
+ return sipProvider.getNewCallId();
+ }else {
+ logger.warn("[鏂板缓CallIdHeader澶辫触]锛� ip={}, transport={}", ip, transport);
+ return null;
+ }
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
index ba65581..a351445 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -1,14 +1,14 @@
package com.genersoft.iot.vmp.gb28181.transmit.callback;
-import java.util.HashMap;
+import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.context.request.async.DeferredResult;
+
+import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.async.DeferredResult;
/**
* @description: 寮傛璇锋眰澶勭悊
@@ -51,31 +51,48 @@
public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST";
- private Map<String, Map<String, DeferredResult>> map = new ConcurrentHashMap<>();
+ private Map<String, Map<String, DeferredResultEx>> map = new ConcurrentHashMap<>();
- public void put(String key, String id, DeferredResult result) {
- Map<String, DeferredResult> deferredResultMap = map.get(key);
+ public void put(String key, String id, DeferredResultEx result) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
if (deferredResultMap == null) {
deferredResultMap = new ConcurrentHashMap<>();
map.put(key, deferredResultMap);
}
deferredResultMap.put(id, result);
}
-
- public DeferredResult get(String key, String id) {
- Map<String, DeferredResult> deferredResultMap = map.get(key);
+
+ public void put(String key, String id, DeferredResult result) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
if (deferredResultMap == null) {
+ deferredResultMap = new ConcurrentHashMap<>();
+ map.put(key, deferredResultMap);
+ }
+ deferredResultMap.put(id, new DeferredResultEx(result));
+ }
+
+ public DeferredResultEx get(String key, String id) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (deferredResultMap == null || ObjectUtils.isEmpty(id)) {
return null;
}
return deferredResultMap.get(id);
+ }
+
+ public Collection<DeferredResultEx> getAllByKey(String key) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (deferredResultMap == null) {
+ return null;
+ }
+ return deferredResultMap.values();
}
public boolean exist(String key, String id){
if (key == null) {
return false;
}
- Map<String, DeferredResult> deferredResultMap = map.get(key);
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
if (id == null) {
return deferredResultMap != null;
}else {
@@ -88,15 +105,15 @@
* @param msg
*/
public void invokeResult(RequestMessage msg) {
- Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey());
+ Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
if (deferredResultMap == null) {
return;
}
- DeferredResult result = deferredResultMap.get(msg.getId());
+ DeferredResultEx result = deferredResultMap.get(msg.getId());
if (result == null) {
return;
}
- result.setResult(msg.getData());
+ result.getDeferredResult().setResult(msg.getData());
deferredResultMap.remove(msg.getId());
if (deferredResultMap.size() == 0) {
map.remove(msg.getKey());
@@ -108,18 +125,30 @@
* @param msg
*/
public void invokeAllResult(RequestMessage msg) {
- Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey());
+ Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
if (deferredResultMap == null) {
return;
}
- Set<String> ids = deferredResultMap.keySet();
- for (String id : ids) {
- DeferredResult result = deferredResultMap.get(id);
- if (result == null) {
+ synchronized (this) {
+ deferredResultMap = map.get(msg.getKey());
+ if (deferredResultMap == null) {
return;
}
- result.setResult(msg.getData());
+ Set<String> ids = deferredResultMap.keySet();
+ for (String id : ids) {
+ DeferredResultEx result = deferredResultMap.get(id);
+ if (result == null) {
+ return;
+ }
+ if (result.getFilter() != null) {
+ Object handler = result.getFilter().handler(msg.getData());
+ result.getDeferredResult().setResult(handler);
+ }else {
+ result.getDeferredResult().setResult(msg.getData());
+ }
+
+ }
+ map.remove(msg.getKey());
}
- map.remove(msg.getKey());
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index 7ecdaf0..0fe11c0 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd;
import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
@@ -36,7 +37,7 @@
private SipConfig sipConfig;
@Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private GitUtil gitUtil;
@@ -44,42 +45,42 @@
@Autowired
private IRedisCatchStorage redisCatchStorage;
- public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader, boolean isRegister) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+ public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader, boolean isRegister) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
- String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
+ String sipAddress = parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort();
//璇锋眰琛�
- SipURI requestLine = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(),
- platform.getServerIP() + ":" + platform.getServerPort());
+ SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(),
+ parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
//via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(platform.getServerIP(), platform.getServerPort(), platform.getTransport(), viaTag);
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(parentPlatform.getServerIP(), parentPlatform.getServerPort(), parentPlatform.getTransport(), viaTag);
viaHeader.setRPort();
viaHeaders.add(viaHeader);
//from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(), sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, fromTag);
//to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(), sipConfig.getDomain());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), sipConfig.getDomain());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress,null);
//Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(CSeq, Request.REGISTER);
- request = sipFactory.createMessageFactory().createRequest(requestLine, Request.REGISTER, callIdHeader,
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(CSeq, Request.REGISTER);
+ request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.REGISTER, callIdHeader,
cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
- .createSipURI(platform.getDeviceGBId(), sipAddress));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory()
+ .createSipURI(parentPlatform.getDeviceGBId(), sipAddress));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
- ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(isRegister ? platform.getExpires() : 0);
+ ExpiresHeader expires = sipLayer.getSipFactory().createHeaderFactory().createExpiresHeader(isRegister ? parentPlatform.getExpires() : 0);
request.addHeader(expires);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
return request;
}
@@ -89,9 +90,9 @@
Request registerRequest = createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(), fromTag, viaTag, callIdHeader, isRegister);
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
+ SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
if (www == null) {
- AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader("Digest");
+ AuthorizationHeader authorizationHeader = sipLayer.getSipFactory().createHeaderFactory().createAuthorizationHeader("Digest");
authorizationHeader.setUsername(parentPlatform.getDeviceGBId());
authorizationHeader.setURI(requestURI);
authorizationHeader.setAlgorithm("MD5");
@@ -140,7 +141,7 @@
String RESPONSE = DigestUtils.md5DigestAsHex(reStr.toString().getBytes());
- AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(scheme);
+ AuthorizationHeader authorizationHeader = sipLayer.getSipFactory().createHeaderFactory().createAuthorizationHeader(scheme);
authorizationHeader.setUsername(parentPlatform.getDeviceGBId());
authorizationHeader.setRealm(realm);
authorizationHeader.setNonce(nonce);
@@ -158,7 +159,7 @@
}
public Request createMessageRequest(ParentPlatform parentPlatform, String content, SendRtpItem sendRtpItem) throws PeerUnavailableException, ParseException, InvalidArgumentException {
- CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(sendRtpItem.getCallId());
+ CallIdHeader callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(sendRtpItem.getCallId());
return createMessageRequest(parentPlatform, content, sendRtpItem.getToTag(), SipUtils.getNewViaTag(), sendRtpItem.getFromTag(), callIdHeader);
}
@@ -171,36 +172,36 @@
Request request = null;
String serverAddress = parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort();
// sipuri
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), serverAddress);
+ SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(), serverAddress);
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
parentPlatform.getTransport(), viaTag);
viaHeader.setRPort();
viaHeaders.add(viaHeader);
// from
- // SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), parentPlatform.getDeviceIp() + ":" + parentPlatform.getDeviceIp());
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
+ // SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), parentPlatform.getDeviceIp() + ":" + parentPlatform.getDeviceIp());
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, fromTag);
// to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), serverAddress);
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(), serverAddress);
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, toTag);
// Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
// ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.MESSAGE);
- MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.MESSAGE);
+ MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipLayer.getSipFactory().createMessageFactory();
// 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
messageFactory.setDefaultContentEncodingCharset(parentPlatform.getCharacterSet());
request = messageFactory.createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
request.setContent(content, contentTypeHeader);
return request;
}
@@ -208,54 +209,54 @@
public SIPRequest createNotifyRequest(ParentPlatform parentPlatform, String content, SubscribeInfo subscribeInfo) throws PeerUnavailableException, ParseException, InvalidArgumentException {
SIPRequest request = null;
// sipuri
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
+ SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
parentPlatform.getTransport(), SipUtils.getNewViaTag());
viaHeader.setRPort();
viaHeaders.add(viaHeader);
// from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, subscribeInfo.getResponse().getToTag());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, subscribeInfo.getResponse().getToTag());
// to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerGBDomain());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, subscribeInfo.getRequest().getFromTag());
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerGBDomain());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, subscribeInfo.getRequest().getFromTag());
// Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
// ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.NOTIFY);
- MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.NOTIFY);
+ MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipLayer.getSipFactory().createMessageFactory();
// 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
messageFactory.setDefaultContentEncodingCharset("gb2312");
- CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(subscribeInfo.getRequest().getCallIdHeader().getCallId());
+ CallIdHeader callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(subscribeInfo.getRequest().getCallIdHeader().getCallId());
request = (SIPRequest) messageFactory.createRequest(requestURI, Request.NOTIFY, callIdHeader, cSeqHeader, fromHeader,
toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- EventHeader event = sipFactory.createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
+ EventHeader event = sipLayer.getSipFactory().createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
if (subscribeInfo.getEventId() != null) {
event.setEventId(subscribeInfo.getEventId());
}
request.addHeader(event);
- SubscriptionStateHeader active = sipFactory.createHeaderFactory().createSubscriptionStateHeader("active");
+ SubscriptionStateHeader active = sipLayer.getSipFactory().createHeaderFactory().createSubscriptionStateHeader("active");
request.setHeader(active);
- String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
+ String sipAddress = parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort();
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory()
.createSipURI(parentPlatform.getDeviceGBId(), sipAddress));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
request.setContent(content, contentTypeHeader);
return request;
}
@@ -268,42 +269,42 @@
SIPRequest request = null;
// sipuri
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+ ":" + platform.getServerPort());
+ SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+ ":" + platform.getServerPort());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(platform.getDeviceIp(), Integer.parseInt(platform.getDevicePort()),
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(platform.getDeviceIp(), Integer.parseInt(platform.getDevicePort()),
platform.getTransport(), SipUtils.getNewViaTag());
viaHeader.setRPort();
viaHeaders.add(viaHeader);
// from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(platform.getDeviceGBId(),
platform.getDeviceIp() + ":" + platform.getDevicePort());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, sendRtpItem.getToTag());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, sendRtpItem.getToTag());
// to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerGBDomain());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, sendRtpItem.getFromTag());
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerGBDomain());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, sendRtpItem.getFromTag());
// Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
// ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.BYE);
- MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.BYE);
+ MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipLayer.getSipFactory().createMessageFactory();
// 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
messageFactory.setDefaultContentEncodingCharset("gb2312");
- CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(sendRtpItem.getCallId());
+ CallIdHeader callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(sendRtpItem.getCallId());
request = (SIPRequest) messageFactory.createRequest(requestURI, Request.BYE, callIdHeader, cSeqHeader, fromHeader,
toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
+ String sipAddress = platform.getDeviceIp() + ":" + platform.getDevicePort();
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory()
.createSipURI(platform.getDeviceGBId(), sipAddress));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
return request;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
index 6ec883b..40d049c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -1,33 +1,27 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd;
-import java.text.ParseException;
-import java.util.ArrayList;
-
-import javax.sip.*;
-import javax.sip.address.Address;
-import javax.sip.address.SipURI;
-import javax.sip.header.*;
-import javax.sip.message.Request;
-
-import com.genersoft.iot.vmp.common.StreamInfo;
-import com.genersoft.iot.vmp.gb28181.bean.SipMsgInfo;
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
-import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.utils.GitUtil;
-import gov.nist.javax.sip.SipProviderImpl;
-import gov.nist.javax.sip.SipStackImpl;
import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.message.SIPResponse;
-import gov.nist.javax.sip.stack.SIPDialog;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
-import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
+import javax.sip.InvalidArgumentException;
+import javax.sip.PeerUnavailableException;
+import javax.sip.SipException;
+import javax.sip.address.Address;
+import javax.sip.address.SipURI;
+import javax.sip.header.*;
+import javax.sip.message.Request;
+import java.text.ParseException;
+import java.util.ArrayList;
/**
* @description:鎽勫儚澶村懡浠equest鍒涢�犲櫒 TODO 鍐椾綑浠g爜澶寰呬紭鍖�
@@ -41,7 +35,7 @@
private SipConfig sipConfig;
@Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private GitUtil gitUtil;
@@ -55,32 +49,32 @@
public Request createMessageRequest(Device device, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
// sipuri
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
+ SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), viaTag);
viaHeader.setRPort();
viaHeaders.add(viaHeader);
// from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, fromTag);
// to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, toTag);
// Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
// ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.MESSAGE);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.MESSAGE);
- request = sipFactory.createMessageFactory().createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
+ request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
request.setContent(content, contentTypeHeader);
return request;
}
@@ -88,38 +82,39 @@
public Request createInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, String ssrc, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
//璇锋眰琛�
- SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
+ SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
//via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
+ HeaderFactory headerFactory = sipLayer.getSipFactory().createHeaderFactory();
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), viaTag);
viaHeader.setRPort();
viaHeaders.add(viaHeader);
//from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
//to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress,null);
//Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE);
- request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE);
+ request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
- // Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
+ // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
// Subject
- SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
+ SubjectHeader subjectHeader = sipLayer.getSipFactory().createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
request.addHeader(subjectHeader);
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
request.setContent(content, contentTypeHeader);
return request;
}
@@ -127,39 +122,39 @@
public Request createPlaybackInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader, String ssrc) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
//璇锋眰琛�
- SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
+ SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), viaTag);
viaHeader.setRPort();
viaHeaders.add(viaHeader);
//from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
//to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress,null);
//Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE);
- request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE);
+ request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
- // Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
+ // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
// Subject
- SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
+ SubjectHeader subjectHeader = sipLayer.getSipFactory().createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
request.addHeader(subjectHeader);
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
request.setContent(content, contentTypeHeader);
return request;
}
@@ -167,34 +162,34 @@
public Request createByteRequest(Device device, String channelId, SipTransactionInfo transactionInfo) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
//璇锋眰琛�
- SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
+ SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
viaHeaders.add(viaHeader);
//from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag());
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag());
//to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,device.getHostAddress());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, transactionInfo.getToTag());
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId,device.getHostAddress());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, transactionInfo.getToTag());
//Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.BYE);
- CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(transactionInfo.getCallId());
- request = sipFactory.createMessageFactory().createRequest(requestLine, Request.BYE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.BYE);
+ CallIdHeader callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(transactionInfo.getCallId());
+ request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.BYE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
return request;
}
@@ -202,50 +197,50 @@
public Request createSubscribeRequest(Device device, String content, SIPRequest requestOld, Integer expires, String event, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
// sipuri
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
+ SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(),
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(),
device.getTransport(), SipUtils.getNewViaTag());
viaHeader.setRPort();
viaHeaders.add(viaHeader);
// from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, requestOld == null ? SipUtils.getNewFromTag() :requestOld.getFromTag());
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, requestOld == null ? SipUtils.getNewFromTag() :requestOld.getFromTag());
// to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, requestOld == null ? null :requestOld.getToTag());
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, requestOld == null ? null :requestOld.getToTag());
// Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
// ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.SUBSCRIBE);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.SUBSCRIBE);
- request = sipFactory.createMessageFactory().createRequest(requestURI, Request.SUBSCRIBE, callIdHeader, cSeqHeader, fromHeader,
+ request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestURI, Request.SUBSCRIBE, callIdHeader, cSeqHeader, fromHeader,
toHeader, viaHeaders, maxForwards);
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
// Expires
- ExpiresHeader expireHeader = sipFactory.createHeaderFactory().createExpiresHeader(expires);
+ ExpiresHeader expireHeader = sipLayer.getSipFactory().createHeaderFactory().createExpiresHeader(expires);
request.addHeader(expireHeader);
// Event
- EventHeader eventHeader = sipFactory.createHeaderFactory().createEventHeader(event);
+ EventHeader eventHeader = sipLayer.getSipFactory().createHeaderFactory().createEventHeader(event);
int random = (int) Math.floor(Math.random() * 10000);
eventHeader.setEventId(random + "");
request.addHeader(eventHeader);
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
request.setContent(content, contentTypeHeader);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
return request;
}
@@ -257,64 +252,65 @@
}
SIPRequest request = null;
//璇锋眰琛�
- SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
+ SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
viaHeaders.add(viaHeader);
//from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag());
+ SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
+ Address fromAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipLayer.getSipFactory().createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag());
//to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,device.getHostAddress());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, transactionInfo.getToTag());
+ SipURI toSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId,device.getHostAddress());
+ Address toAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipLayer.getSipFactory().createHeaderFactory().createToHeader(toAddress, transactionInfo.getToTag());
//Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INFO);
- CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(transactionInfo.getCallId());
- request = (SIPRequest)sipFactory.createMessageFactory().createRequest(requestLine, Request.INFO, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INFO);
+ CallIdHeader callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(transactionInfo.getCallId());
+ request = (SIPRequest)sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.INFO, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
if (content != null) {
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application",
+ ContentTypeHeader contentTypeHeader = sipLayer.getSipFactory().createHeaderFactory().createContentTypeHeader("Application",
"MANSRTSP");
request.setContent(content, contentTypeHeader);
}
return request;
}
- public Request createAckRequest(SipURI sipURI, SIPResponse sipResponse) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+ public Request createAckRequest(String localIp, SipURI sipURI, SIPResponse sipResponse) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+
// via
ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), sipResponse.getTopmostViaHeader().getTransport(), SipUtils.getNewViaTag());
+ ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(localIp, sipConfig.getPort(), sipResponse.getTopmostViaHeader().getTransport(), SipUtils.getNewViaTag());
viaHeaders.add(viaHeader);
//Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ MaxForwardsHeader maxForwards = sipLayer.getSipFactory().createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(sipResponse.getCSeqHeader().getSeqNumber(), Request.ACK);
+ CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(sipResponse.getCSeqHeader().getSeqNumber(), Request.ACK);
- Request request = sipFactory.createMessageFactory().createRequest(sipURI, Request.ACK, sipResponse.getCallIdHeader(), cSeqHeader, sipResponse.getFromHeader(), sipResponse.getToHeader(), viaHeaders, maxForwards);
+ Request request = sipLayer.getSipFactory().createMessageFactory().createRequest(sipURI, Request.ACK, sipResponse.getCallIdHeader(), cSeqHeader, sipResponse.getFromHeader(), sipResponse.getToHeader(), viaHeaders, maxForwards);
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), localIp + ":"+sipConfig.getPort()));
+ request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
return request;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 91f0946..b382b63 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -5,6 +5,7 @@
import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
@@ -32,7 +33,6 @@
import javax.sip.InvalidArgumentException;
import javax.sip.ResponseEvent;
import javax.sip.SipException;
-import javax.sip.SipFactory;
import javax.sip.header.CallIdHeader;
import javax.sip.message.Request;
import java.text.ParseException;
@@ -52,7 +52,7 @@
private SipConfig sipConfig;
@Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private SIPSender sipSender;
@@ -181,9 +181,9 @@
ptzXml.append("</Info>\r\n");
ptzXml.append("</Control>\r\n");
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(device.getTransport()));
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
}
/**
@@ -216,8 +216,8 @@
- SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest(request);
+ SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
}
@@ -245,8 +245,8 @@
ptzXml.append("</Control>\r\n");
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest(request, errorEvent, okEvent);
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request, errorEvent, okEvent);
}
@@ -340,8 +340,8 @@
- Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, (e -> {
+ Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, (e -> {
streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
errorEvent.response(e);
@@ -423,36 +423,39 @@
content.append("a=rtpmap:97 MPEG4/90000\r\n");
content.append("a=rtpmap:98 H264/90000\r\n");
content.append("a=rtpmap:99 H265/90000\r\n");
- if ("TCP-PASSIVE".equalsIgnoreCase(streamMode)) { // tcp琚姩妯″紡
+ if ("TCP-PASSIVE".equalsIgnoreCase(streamMode)) {
+ // tcp琚姩妯″紡
content.append("a=setup:passive\r\n");
content.append("a=connection:new\r\n");
- } else if ("TCP-ACTIVE".equalsIgnoreCase(streamMode)) { // tcp涓诲姩妯″紡
+ } else if ("TCP-ACTIVE".equalsIgnoreCase(streamMode)) {
+ // tcp涓诲姩妯″紡
content.append("a=setup:active\r\n");
content.append("a=connection:new\r\n");
}
}
- content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
+ //ssrc
+ content.append("y=" + ssrcInfo.getSsrc() + "\r\n");
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
// 娣诲姞璁㈤槄
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
if (hookEvent != null) {
- InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream());
+ InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream());
hookEvent.call(inviteStreamInfo);
}
subscribe.removeSubscribe(hookSubscribe);
});
- Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()), ssrcInfo.getSsrc());
+ Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()), ssrcInfo.getSsrc());
- sipSender.transmitRequest( request, errorEvent, event -> {
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, event -> {
ResponseEvent responseEvent = (ResponseEvent) event.event;
SIPResponse response = (SIPResponse) responseEvent.getResponse();
- streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback);
+ streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback);
okEvent.response(event);
});
if (inviteStreamCallback != null) {
- inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
+ inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
}
}
@@ -541,7 +544,7 @@
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
// 娣诲姞璁㈤槄
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
- hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
+ hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
subscribe.removeSubscribe(hookSubscribe);
hookSubscribe.getContent().put("regist", false);
hookSubscribe.getContent().put("schema", "rtsp");
@@ -550,7 +553,7 @@
(MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> {
logger.info("[褰曞儚]涓嬭浇缁撴潫锛� 鍙戦�丅YE");
try {
- streamByeCmd(device, channelId, ssrcInfo.getStream(),sipSender.getNewCallIdHeader(device.getTransport()).getCallId());
+ streamByeCmd(device, channelId, ssrcInfo.getStream(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId());
} catch (InvalidArgumentException | ParseException | SipException |
SsrcTransactionNotFoundException e) {
logger.error("[褰曞儚]涓嬭浇缁撴潫锛� 鍙戦�丅YE澶辫触 {}", e.getMessage());
@@ -558,14 +561,14 @@
});
});
- Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()), ssrcInfo.getSsrc());
+ Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()), ssrcInfo.getSsrc());
if (inviteStreamCallback != null) {
- inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
+ inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
}
- sipSender.transmitRequest( request, errorEvent, okEvent -> {
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent -> {
ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
SIPResponse response = (SIPResponse) responseEvent.getResponse();
- streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
+ streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
});
}
@@ -592,7 +595,7 @@
streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo());
- sipSender.transmitRequest( byteRequest, null, okEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), byteRequest, null, okEvent);
}
/**
@@ -625,8 +628,8 @@
- Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request);
+ Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
}
@@ -645,8 +648,8 @@
- Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
@@ -676,8 +679,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -700,8 +703,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
}
/**
@@ -725,8 +728,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -761,8 +764,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -790,8 +793,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
}
/**
@@ -837,8 +840,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -900,8 +903,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -923,9 +926,9 @@
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -947,9 +950,9 @@
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
}
@@ -972,9 +975,9 @@
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -1018,9 +1021,9 @@
Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
- SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
+ SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest( request, errorEvent, okEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
}
/**
@@ -1068,8 +1071,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -1098,8 +1101,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -1125,8 +1128,8 @@
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
/**
@@ -1149,9 +1152,9 @@
- Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
+ Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest( request, errorEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
}
@@ -1179,13 +1182,13 @@
CallIdHeader callIdHeader;
if (requestOld != null) {
- callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
+ callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
} else {
- callIdHeader = sipSender.getNewCallIdHeader(device.getTransport());
+ callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
}
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
- sipSender.transmitRequest( request, errorEvent, okEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
return request;
}
@@ -1234,8 +1237,8 @@
- Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest( request);
+ Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
}
@@ -1254,15 +1257,15 @@
CallIdHeader callIdHeader;
if (requestOld != null) {
- callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
+ callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
} else {
- callIdHeader = sipSender.getNewCallIdHeader(device.getTransport());
+ callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
}
// 鏈夋晥鏃堕棿榛樿涓�60绉掍互涓�
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog",
callIdHeader);
- sipSender.transmitRequest( request, errorEvent, okEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
return request;
}
@@ -1283,9 +1286,9 @@
dragXml.append(cmdString);
dragXml.append("</Control>\r\n");
- Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
+ Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
logger.debug("鎷夋淇′护锛� " + request.toString());
- sipSender.transmitRequest(request);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
}
@@ -1364,7 +1367,7 @@
return;
}
- sipSender.transmitRequest( request, errorEvent, okEvent);
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
}
@Override
@@ -1394,8 +1397,8 @@
deviceStatusXml.append("</Notify>\r\n");
- Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getTransport()));
- sipSender.transmitRequest(request);
+ Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index 87b5fdb..0f234f5 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -1,6 +1,8 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
@@ -53,7 +55,7 @@
private ZLMRTPServerFactory zlmrtpServerFactory;
@Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private SIPSender sipSender;
@@ -73,7 +75,7 @@
SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) throws SipException, InvalidArgumentException, ParseException {
Request request;
if (!registerAgain ) {
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
request = headerProviderPlatformProvider.createRegisterRequest(parentPlatform,
redisCatchStorage.getCSEQ(), SipUtils.getNewFromTag(),
@@ -95,11 +97,11 @@
});
}else {
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
request = headerProviderPlatformProvider.createRegisterRequest(parentPlatform, SipUtils.getNewFromTag(), null, callId, www, callIdHeader, isRegister);
}
- sipSender.transmitRequest( request, null, okEvent);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request, null, okEvent);
}
@Override
@@ -114,7 +116,7 @@
keepaliveXml.append("<Status>OK</Status>\r\n");
keepaliveXml.append("</Notify>\r\n");
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(
parentPlatform,
@@ -122,7 +124,7 @@
SipUtils.getNewFromTag(),
SipUtils.getNewViaTag(),
callIdHeader);
- sipSender.transmitRequest( request, errorEvent, okEvent);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request, errorEvent, okEvent);
return callIdHeader.getCallId();
}
@@ -145,10 +147,10 @@
String catalogXml = getCatalogXml(channels, sn, parentPlatform, size);
// callid
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
}
@@ -231,10 +233,10 @@
}
String catalogXml = getCatalogXml(deviceChannels, sn, parentPlatform, channels.size());
// callid
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, SipUtils.getNewViaTag(), callIdHeader);
- sipSender.transmitRequest( request, null, eventResult -> {
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request, null, eventResult -> {
int indexNext = index + parentPlatform.getCatalogGroup();
try {
sendCatalogResponse(channels, parentPlatform, sn, fromTag, indexNext);
@@ -270,10 +272,10 @@
deviceInfoXml.append("<Result>OK</Result>\r\n");
deviceInfoXml.append("</Response>\r\n");
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
}
/**
@@ -300,10 +302,10 @@
deviceStatusXml.append("<Status>OK</Status>\r\n");
deviceStatusXml.append("</Response>\r\n");
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
}
@@ -362,10 +364,10 @@
deviceStatusXml.append("</info>\r\n");
deviceStatusXml.append("</Notify>\r\n");
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), SipUtils.getNewFromTag(), SipUtils.getNewViaTag(), callIdHeader);
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
}
@@ -405,14 +407,14 @@
private void sendNotify(ParentPlatform parentPlatform, String catalogXmlContent,
SubscribeInfo subscribeInfo, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent )
throws SipException, ParseException, InvalidArgumentException {
- MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
+ MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipLayer.getSipFactory().createMessageFactory();
String characterSet = parentPlatform.getCharacterSet();
// 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
messageFactory.setDefaultContentEncodingCharset(characterSet);
SIPRequest notifyRequest = headerProviderPlatformProvider.createNotifyRequest(parentPlatform, catalogXmlContent, subscribeInfo);
- sipSender.transmitRequest( notifyRequest);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), notifyRequest);
}
private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, List<DeviceChannel> channels, int sumNum, String type, SubscribeInfo subscribeInfo) {
@@ -577,21 +579,21 @@
recordXml.append("</Response>\r\n");
// callid
- CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getTransport());
+ CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
- sipSender.transmitRequest( request);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
}
@Override
- public void sendMediaStatusNotify(ParentPlatform platform, SendRtpItem sendRtpItem) throws SipException, InvalidArgumentException, ParseException {
- if (sendRtpItem == null || platform == null) {
+ public void sendMediaStatusNotify(ParentPlatform parentPlatform, SendRtpItem sendRtpItem) throws SipException, InvalidArgumentException, ParseException {
+ if (sendRtpItem == null || parentPlatform == null) {
return;
}
- String characterSet = platform.getCharacterSet();
+ String characterSet = parentPlatform.getCharacterSet();
StringBuffer mediaStatusXml = new StringBuffer(200);
mediaStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
mediaStatusXml.append("<Notify>\r\n");
@@ -601,10 +603,10 @@
mediaStatusXml.append("<NotifyType>121</NotifyType>\r\n");
mediaStatusXml.append("</Notify>\r\n");
- SIPRequest messageRequest = (SIPRequest)headerProviderPlatformProvider.createMessageRequest(platform, mediaStatusXml.toString(),
+ SIPRequest messageRequest = (SIPRequest)headerProviderPlatformProvider.createMessageRequest(parentPlatform, mediaStatusXml.toString(),
sendRtpItem);
- sipSender.transmitRequest(messageRequest);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(),messageRequest);
}
@@ -620,26 +622,26 @@
}
@Override
- public void streamByeCmd(ParentPlatform platform, SendRtpItem sendRtpItem) throws SipException, InvalidArgumentException, ParseException {
+ public void streamByeCmd(ParentPlatform parentPlatform, SendRtpItem sendRtpItem) throws SipException, InvalidArgumentException, ParseException {
if (sendRtpItem == null ) {
logger.info("[鍚戜笂绾у彂閫丅YE]锛� sendRtpItem 涓篘ULL");
return;
}
- if (platform == null) {
+ if (parentPlatform == null) {
logger.info("[鍚戜笂绾у彂閫丅YE]锛� platform 涓篘ULL");
return;
}
- logger.info("[鍚戜笂绾у彂閫丅YE]锛� {}/{}", platform.getServerGBId(), sendRtpItem.getChannelId());
+ logger.info("[鍚戜笂绾у彂閫丅YE]锛� {}/{}", parentPlatform.getServerGBId(), sendRtpItem.getChannelId());
String mediaServerId = sendRtpItem.getMediaServerId();
MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
if (mediaServerItem != null) {
mediaServerService.releaseSsrc(mediaServerItem.getId(), sendRtpItem.getSsrc());
zlmrtpServerFactory.closeRtpServer(mediaServerItem, sendRtpItem.getStreamId());
}
- SIPRequest byeRequest = headerProviderPlatformProvider.createByeRequest(platform, sendRtpItem);
+ SIPRequest byeRequest = headerProviderPlatformProvider.createByeRequest(parentPlatform, sendRtpItem);
if (byeRequest == null) {
logger.warn("[鍚戜笂绾у彂閫乥ye]锛氭棤娉曞垱寤� byeRequest");
}
- sipSender.transmitRequest(byeRequest);
+ sipSender.transmitRequest(parentPlatform.getDeviceIp(),byeRequest);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
index 90865a5..53efdd9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
@@ -177,7 +177,7 @@
}
// 鍙戦�乺esponse
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(sipRequest.getLocalAddress().getHostAddress(), response);
return response;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index f221880..3d3c772 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -418,7 +418,7 @@
// 鏈煡閿欒銆傜洿鎺ヨ浆鍙戣澶囩偣鎾殑閿欒
try {
Response response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
} catch (ParseException | SipException e) {
e.printStackTrace();
}
@@ -481,8 +481,7 @@
playService.play(mediaServerItem, ssrcInfo, device, channelId, hookEvent, errorEvent, (code, msg) -> {
logger.info("[涓婄骇鐐规挱]瓒呮椂, 鐢ㄦ埛锛歿}锛� 閫氶亾锛歿}", username, channelId);
redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
- zlmrtpServerFactory.releasePort(finalMediaServerItem, sendRtpItem.getSsrc());
- }, null);
+ });
} else {
sendRtpItem.setStreamId(playTransaction.getStream());
// 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶�
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
index 0b657b5..ded86ae 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -1,20 +1,20 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.utils.DateUtil;
import gov.nist.javax.sip.RequestEventExt;
import gov.nist.javax.sip.address.AddressImpl;
import gov.nist.javax.sip.address.SipUri;
-import gov.nist.javax.sip.header.Expires;
import gov.nist.javax.sip.header.SIPDateHeader;
+import gov.nist.javax.sip.message.SIPRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
@@ -24,8 +24,10 @@
import javax.sip.RequestEvent;
import javax.sip.SipException;
-import javax.sip.header.*;
-import javax.sip.message.Request;
+import javax.sip.header.AuthorizationHeader;
+import javax.sip.header.ContactHeader;
+import javax.sip.header.FromHeader;
+import javax.sip.header.ViaHeader;
import javax.sip.message.Response;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
@@ -71,12 +73,11 @@
RequestEventExt evtExt = (RequestEventExt) evt;
String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
logger.info("[娉ㄥ唽璇锋眰] 寮�濮嬪鐞�: {}", requestAddress);
- Request request = evt.getRequest();
- ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
+ SIPRequest request = (SIPRequest)evt.getRequest();
Response response = null;
boolean passwordCorrect = false;
// 娉ㄥ唽鏍囧織
- boolean registerFlag = false;
+ boolean registerFlag;
FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
AddressImpl address = (AddressImpl) fromHeader.getAddress();
SipUri uri = (SipUri) address.getURI();
@@ -88,7 +89,7 @@
logger.info("[娉ㄥ唽璇锋眰] 鍥炲401: {}", requestAddress);
response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
return;
}
@@ -101,7 +102,7 @@
response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
response.setReasonPhrase("wrong password");
logger.info("[娉ㄥ唽璇锋眰] 瀵嗙爜/SIP鏈嶅姟鍣↖D閿欒, 鍥炲403: {}", requestAddress);
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
return;
}
@@ -114,9 +115,9 @@
dateHeader.setDate(wvpSipDate);
response.addHeader(dateHeader);
- if (expiresHeader == null) {
+ if (request.getExpires() == null) {
response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
return;
}
// 娣诲姞Contact澶�
@@ -145,12 +146,13 @@
device.setIp(received);
device.setPort(rPort);
device.setHostAddress(received.concat(":").concat(String.valueOf(rPort)));
- if (expiresHeader.getExpires() == 0) {
+ device.setLocalIp(request.getLocalAddress().getHostAddress());
+ if (request.getExpires().getExpires() == 0) {
// 娉ㄩ攢鎴愬姛
registerFlag = false;
} else {
// 娉ㄥ唽鎴愬姛
- device.setExpires(expiresHeader.getExpires());
+ device.setExpires(request.getExpires().getExpires());
registerFlag = true;
// 鍒ゆ柇TCP杩樻槸UDP
ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
@@ -158,7 +160,7 @@
device.setTransport("TCP".equalsIgnoreCase(transport) ? "TCP" : "UDP");
}
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
// 娉ㄥ唽鎴愬姛
// 淇濆瓨鍒皉edis
if (registerFlag) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
index 502b4e7..d32d194 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -93,7 +93,7 @@
response.setExpires(expireHeader);
}
logger.info("response : " + response);
- sipSender.transmitRequest(response);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
index 7ddb1be..f97a659 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
@@ -9,8 +9,6 @@
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.control.ControlMessageHandler;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
-import com.genersoft.iot.vmp.utils.SpringBeanFactory;
-import gov.nist.javax.sip.SipStackImpl;
import gov.nist.javax.sip.message.SIPRequest;
import org.dom4j.Element;
import org.slf4j.Logger;
@@ -84,23 +82,24 @@
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 娉ㄩ攢: {}", e.getMessage());
}
taskExecutor.execute(()->{
- try {
- Thread.sleep(3000);
- SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
- SipStackImpl stack = (SipStackImpl)up.getSipStack();
- stack.stop();
- Iterator listener = stack.getListeningPoints();
- while (listener.hasNext()) {
- stack.deleteListeningPoint((ListeningPoint) listener.next());
- }
- Iterator providers = stack.getSipProviders();
- while (providers.hasNext()) {
- stack.deleteSipProvider((SipProvider) providers.next());
- }
- VManageBootstrap.restart();
- } catch (InterruptedException | ObjectInUseException e) {
- logger.error("[浠诲姟鎵ц澶辫触] 鏈嶅姟閲嶅惎: {}", e.getMessage());
- }
+ // 杩滅▼鍚姩
+// try {
+// Thread.sleep(3000);
+// SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
+// SipStackImpl stack = (SipStackImpl)up.getSipStack();
+// stack.stop();
+// Iterator listener = stack.getListeningPoints();
+// while (listener.hasNext()) {
+// stack.deleteListeningPoint((ListeningPoint) listener.next());
+// }
+// Iterator providers = stack.getSipProviders();
+// while (providers.hasNext()) {
+// stack.deleteSipProvider((SipProvider) providers.next());
+// }
+// VManageBootstrap.restart();
+// } catch (InterruptedException | ObjectInUseException e) {
+// logger.error("[浠诲姟鎵ц澶辫触] 鏈嶅姟閲嶅惎: {}", e.getMessage());
+// }
});
} else {
// 杩滅▼鍚姩鎸囧畾璁惧
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
index 5a4ceb2..d0ba97e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.response.impl;
import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
@@ -54,7 +55,7 @@
@Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private SIPSender sipSender;
@@ -103,11 +104,12 @@
} else {
sdp = SdpFactory.getInstance().createSessionDescription(contentString);
}
- SipURI requestUri = sipFactory.createAddressFactory().createSipURI(sdp.getOrigin().getUsername(), event.getRemoteIpAddress() + ":" + event.getRemotePort());
- Request reqAck = headerProvider.createAckRequest(requestUri, response);
+
+ SipURI requestUri = sipLayer.getSipFactory().createAddressFactory().createSipURI(sdp.getOrigin().getUsername(), event.getRemoteIpAddress() + ":" + event.getRemotePort());
+ Request reqAck = headerProvider.createAckRequest(response.getLocalAddress().getHostAddress(), requestUri, response);
logger.info("[鍥炲ack] {}-> {}:{} ", sdp.getOrigin().getUsername(), event.getRemoteIpAddress(), event.getRemotePort());
- sipSender.transmitRequest(reqAck);
+ sipSender.transmitRequest( response.getLocalAddress().getHostAddress(), reqAck);
}
} catch (InvalidArgumentException | ParseException | SipException | SdpParseException e) {
logger.info("[鐐规挱鍥炲ACK]锛屽紓甯革細", e );
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
index d0e1583..14d1f84 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
@@ -100,7 +100,7 @@
if (platformRegisterInfo.isRegister()) {
platformService.online(parentPlatform);
}else {
- platformService.offline(parentPlatform);
+ platformService.offline(parentPlatform, false);
}
// 娉ㄥ唽/娉ㄩ攢鎴愬姛绉婚櫎缂撳瓨鐨勪俊鎭�
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index a6320df..a314554 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -568,8 +568,6 @@
public JSONObject onServerStarted(HttpServletRequest request, @RequestBody JSONObject jsonObject){
jsonObject.put("ip", request.getRemoteAddr());
- System.out.println(jsonObject.toJSONString()
- );
ZLMServerConfig zlmServerConfig = JSON.to(ZLMServerConfig.class, jsonObject);
zlmServerConfig.setIp(request.getRemoteAddr());
logger.info("[ZLM HOOK] zlm 鍚姩 " + zlmServerConfig.getGeneralMediaServerId());
@@ -632,7 +630,6 @@
@ResponseBody
@PostMapping(value = "/on_rtp_server_timeout", produces = "application/json;charset=UTF-8")
public JSONObject onRtpServerTimeout(HttpServletRequest request, @RequestBody OnRtpServerTimeoutHookParam param){
- System.out.println(param);
logger.info("[ZLM HOOK] rtpServer鏀舵祦瓒呮椂锛歿}->{}({})", param.getMediaServerId(), param.getStream_id(), param.getSsrc());
JSONObject ret = new JSONObject();
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
index 50f0113..7d3510f 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -169,7 +169,6 @@
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
- logger.info("response body contentType: " + Objects.requireNonNull(response.body()).contentType());
if (targetPath != null) {
File snapFolder = new File(targetPath);
if (!snapFolder.exists()) {
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
index 04fde17..a4b4cb7 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
@@ -25,7 +25,7 @@
import java.util.concurrent.ConcurrentHashMap;
@Component
-@Order(value=1)
+@Order(value=2)
public class ZLMRunner implements CommandLineRunner {
private final static Logger logger = LoggerFactory.getLogger(ZLMRunner.class);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java b/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
index ddc91eb..17f8b37 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
@@ -1,12 +1,7 @@
package com.genersoft.iot.vmp.service;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
-import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import com.github.pagehelper.PageInfo;
-
-import java.util.List;
/**
* 鍥芥爣骞冲彴鐨勪笟鍔$被
@@ -40,7 +35,7 @@
* 骞冲彴绂荤嚎
* @param parentPlatform 骞冲彴淇℃伅
*/
- void offline(ParentPlatform parentPlatform);
+ void offline(ParentPlatform parentPlatform, boolean stopRegisterTask);
/**
* 鍚戜笂绾у钩鍙板彂璧锋敞鍐�
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java b/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
index 1991392..8b3984f 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
@@ -13,7 +13,6 @@
import com.genersoft.iot.vmp.service.bean.PlayBackCallback;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
import org.springframework.web.context.request.async.DeferredResult;
import javax.sip.InvalidArgumentException;
@@ -25,12 +24,12 @@
*/
public interface IPlayService {
- void onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject resonse, String deviceId, String channelId, String uuid);
+ void onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject resonse, String deviceId, String channelId);
void play(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
- InviteTimeOutCallback timeoutCallback, String uuid);
- PlayResult play(MediaServerItem mediaServerItem, String deviceId, String channelId, ZlmHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent, Runnable timeoutCallback);
+ InviteTimeOutCallback timeoutCallback);
+ void play(MediaServerItem mediaServerItem, String deviceId, String channelId, ZlmHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent, Runnable timeoutCallback);
MediaServerItem getNewMediaServerItem(Device device);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
index b30b2cc..d9f922a 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -604,7 +604,7 @@
mediaServerItem.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
mediaServerItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
mediaServerItem.setStreamIp(ip);
- mediaServerItem.setHookIp(sipConfig.getIp());
+ mediaServerItem.setHookIp(sipConfig.getIp().split(",")[0]);
mediaServerItem.setSdpIp(ip);
return mediaServerItem;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
index e3a0018..b8241d7 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.common.StreamURL;
import com.genersoft.iot.vmp.conf.MediaConfig;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
@@ -15,6 +16,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
+
+import java.net.URL;
@Service
public class MediaServiceImpl implements IMediaService {
@@ -91,38 +94,17 @@
if (addr == null) {
addr = mediaInfo.getStreamIp();
}
+
streamInfoResult.setIp(addr);
streamInfoResult.setMediaServerId(mediaInfo.getId());
String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId;
- streamInfoResult.setRtmp(String.format("rtmp://%s:%s/%s/%s%s", addr, mediaInfo.getRtmpPort(), app, stream, callIdParam));
- if (mediaInfo.getRtmpSSlPort() != 0) {
- streamInfoResult.setRtmps(String.format("rtmps://%s:%s/%s/%s%s", addr, mediaInfo.getRtmpSSlPort(), app, stream, callIdParam));
- }
- streamInfoResult.setRtsp(String.format("rtsp://%s:%s/%s/%s%s", addr, mediaInfo.getRtspPort(), app, stream, callIdParam));
- if (mediaInfo.getRtspSSLPort() != 0) {
- streamInfoResult.setRtsps(String.format("rtsps://%s:%s/%s/%s%s", addr, mediaInfo.getRtspSSLPort(), app, stream, callIdParam));
- }
- streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setHls(String.format("http://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setWs_hls(String.format("ws://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setFmp4(String.format("http://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
- streamInfoResult.setRtc(String.format("http://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play%s", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream, ObjectUtils.isEmpty(callId)?"":"&callId=" + callId));
- if (mediaInfo.getHttpSSlPort() != 0) {
- streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setHttps_hls(String.format("https://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setWss_hls(String.format("wss://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setHttps_fmp4(String.format("https://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setWss_fmp4(String.format("wss://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setHttps_ts(String.format("https://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
- streamInfoResult.setRtcs(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play%s", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app, stream, ObjectUtils.isEmpty(callId)?"":"&callId=" + callId));
- }
+ streamInfoResult.setRtmp(addr, mediaInfo.getRtmpPort(),mediaInfo.getRtmpSSlPort(), app, stream, callIdParam);
+ streamInfoResult.setRtsp(addr, mediaInfo.getRtspPort(),mediaInfo.getRtspSSLPort(), app, stream, callIdParam);
+ streamInfoResult.setFlv(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
+ streamInfoResult.setFmp4(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
+ streamInfoResult.setHls(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
+ streamInfoResult.setTs(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
+ streamInfoResult.setRtc(addr, mediaInfo.getHttpPort(),mediaInfo.getHttpSSlPort(), app, stream, callIdParam);
streamInfoResult.setTracks(tracks);
return streamInfoResult;
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
index fe67ede..fbc507a 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -22,7 +22,6 @@
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
-import javax.sip.TimeoutEvent;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
@@ -131,20 +130,23 @@
}
final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId();
- if (dynamicTask.contains(registerTaskKey)) {
- dynamicTask.stop(registerTaskKey);
- }
- // 娣诲姞娉ㄥ唽浠诲姟
- dynamicTask.startDelay(registerTaskKey,
+ if (!dynamicTask.isAlive(registerTaskKey)) {
+ // 娣诲姞娉ㄥ唽浠诲姟
+ dynamicTask.startCron(registerTaskKey,
// 娉ㄥ唽澶辫触锛堟敞鍐屾垚鍔熸椂鐢辩▼搴忕洿鎺ヨ皟鐢ㄤ簡online鏂规硶锛�
()-> {
try {
- commanderForPlatform.register(parentPlatform, eventResult -> offline(parentPlatform),null);
+ logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽鍗冲皢鍒版湡锛岄噸鏂版敞鍐�", parentPlatform.getServerGBId());
+ commanderForPlatform.register(parentPlatform, eventResult -> {
+ offline(parentPlatform, false);
+ },null);
} catch (InvalidArgumentException | ParseException | SipException e) {
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈瀹氭椂娉ㄥ唽: {}", e.getMessage());
}
},
(parentPlatform.getExpires() - 10) *1000);
+ }
+
final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId();
if (!dynamicTask.contains(keepaliveTaskKey)) {
@@ -160,16 +162,11 @@
// 姝ゆ椂鏄涓夋蹇冭烦瓒呮椂锛� 骞冲彴绂荤嚎
if (platformCatch.getKeepAliveReply() == 2) {
// 璁剧疆骞冲彴绂荤嚎锛屽苟閲嶆柊娉ㄥ唽
- offline(parentPlatform);
logger.info("[鍥芥爣绾ц仈] {}锛屼笁娆″績璺宠秴鏃跺悗鍐嶆鍙戣捣娉ㄥ唽", parentPlatform.getServerGBId());
try {
commanderForPlatform.register(parentPlatform, eventResult1 -> {
logger.info("[鍥芥爣绾ц仈] {}锛屼笁娆″績璺宠秴鏃跺悗鍐嶆鍙戣捣娉ㄥ唽浠嶇劧澶辫触锛屽紑濮嬪畾鏃跺彂璧锋敞鍐岋紝闂撮殧涓�1鍒嗛挓", parentPlatform.getServerGBId());
- // 娣诲姞娉ㄥ唽浠诲姟
- dynamicTask.startCron(registerTaskKey,
- // 娉ㄥ唽澶辫触锛堟敞鍐屾垚鍔熸椂鐢辩▼搴忕洿鎺ヨ皟鐢ㄤ簡online鏂规硶锛�
- ()->logger.info("[鍥芥爣绾ц仈] {},骞冲彴绂荤嚎鍚庢寔缁彂璧锋敞鍐岋紝澶辫触", parentPlatform.getServerGBId()),
- 60*1000);
+ offline(parentPlatform, false);
}, null);
} catch (InvalidArgumentException | ParseException | SipException e) {
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 娉ㄥ唽: {}", e.getMessage());
@@ -198,7 +195,7 @@
}
@Override
- public void offline(ParentPlatform parentPlatform) {
+ public void offline(ParentPlatform parentPlatform, boolean stopRegister) {
logger.info("[骞冲彴绂荤嚎]锛歿}", parentPlatform.getServerGBId());
ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId());
parentPlatformCatch.setKeepAliveReply(0);
@@ -212,11 +209,13 @@
// 鍋滄鎵�鏈夋帹娴�
logger.info("[骞冲彴绂荤嚎] {}, 鍋滄鎵�鏈夋帹娴�", parentPlatform.getServerGBId());
stopAllPush(parentPlatform.getServerGBId());
- // 娓呴櫎娉ㄥ唽瀹氭椂
- logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂娉ㄥ唽浠诲姟", parentPlatform.getServerGBId());
- final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId();
- if (dynamicTask.contains(registerTaskKey)) {
- dynamicTask.stop(registerTaskKey);
+ if (stopRegister) {
+ // 娓呴櫎娉ㄥ唽瀹氭椂
+ logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂娉ㄥ唽浠诲姟", parentPlatform.getServerGBId());
+ final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId();
+ if (dynamicTask.contains(registerTaskKey)) {
+ dynamicTask.stop(registerTaskKey);
+ }
}
// 娓呴櫎蹇冭烦瀹氭椂
logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂鍙戦�佸績璺充换鍔�", parentPlatform.getServerGBId());
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index f4e3227..75fff7f 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -36,7 +36,6 @@
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -53,7 +52,6 @@
import java.math.RoundingMode;
import java.text.ParseException;
import java.util.List;
-import java.util.Objects;
import java.util.UUID;
@SuppressWarnings(value = {"rawtypes", "unchecked"})
@@ -111,46 +109,19 @@
private ThreadPoolTaskExecutor taskExecutor;
@Override
- public PlayResult play(MediaServerItem mediaServerItem, String deviceId, String channelId,
- ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
- Runnable timeoutCallback) {
+ public void play(MediaServerItem mediaServerItem, String deviceId, String channelId,
+ ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
+ Runnable timeoutCallback) {
if (mediaServerItem == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒板彲鐢ㄧ殑zlm");
}
- PlayResult playResult = new PlayResult();
- RequestMessage msg = new RequestMessage();
String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
+
+ RequestMessage msg = new RequestMessage();
msg.setKey(key);
- String uuid = UUID.randomUUID().toString();
- msg.setId(uuid);
- playResult.setUuid(uuid);
- DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
- playResult.setResult(result);
- // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
- resultHolder.put(key, uuid, result);
Device device = redisCatchStorage.getDevice(deviceId);
StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
- playResult.setDevice(device);
-
- result.onCompletion(() -> {
- // 鐐规挱缁撴潫鏃惰皟鐢ㄦ埅鍥炬帴鍙�
- taskExecutor.execute(() -> {
- // TODO 搴旇鍦ㄤ笂娴佹椂璋冪敤鏇村ソ锛岀粨鏉熶篃鍙兘鏄敊璇粨鏉�
- String path = "snap";
- String fileName = deviceId + "_" + channelId + ".jpg";
- WVPResult wvpResult = (WVPResult) result.getResult();
- if (Objects.requireNonNull(wvpResult).getCode() == 0) {
- StreamInfo streamInfoForSuccess = (StreamInfo) wvpResult.getData();
- MediaServerItem mediaInfo = mediaServerService.getOne(streamInfoForSuccess.getMediaServerId());
- String streamUrl = streamInfoForSuccess.getFmp4();
-
- // 璇锋眰鎴浘
- logger.info("[璇锋眰鎴浘]: " + fileName);
- zlmresTfulUtils.getSnap(mediaInfo, streamUrl, 15, 1, path, fileName);
- }
- });
- });
if (streamInfo != null) {
String streamId = streamInfo.getStream();
@@ -160,7 +131,7 @@
wvpResult.setMsg("鐐规挱澶辫触锛� redis缂撳瓨streamId绛変簬null");
msg.setData(wvpResult);
resultHolder.invokeAllResult(msg);
- return playResult;
+ return;
}
String mediaServerId = streamInfo.getMediaServerId();
MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
@@ -178,14 +149,13 @@
msg.setData(wvpResult);
resultHolder.invokeAllResult(msg);
- return playResult;
+ return;
} else {
WVPResult wvpResult = new WVPResult();
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
wvpResult.setData(streamInfo);
msg.setData(wvpResult);
-
resultHolder.invokeAllResult(msg);
if (hookEvent != null) {
hookEvent.response(mediaServerItem, JSON.parseObject(JSON.toJSONString(streamInfo)));
@@ -211,7 +181,6 @@
streamId = String.format("%s_%s", device.getDeviceId(), channelId);
}
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck(), false);
- logger.info(JSONObject.toJSONString(ssrcInfo));
if (ssrcInfo == null) {
WVPResult wvpResult = new WVPResult();
wvpResult.setCode(ErrorCode.ERROR100.getCode());
@@ -219,7 +188,7 @@
msg.setData(wvpResult);
resultHolder.invokeAllResult(msg);
- return playResult;
+ return;
}
play(mediaServerItem, ssrcInfo, device, channelId, (mediaServerItemInUse, response) -> {
if (hookEvent != null) {
@@ -247,16 +216,15 @@
msg.setData(wvpResult);
// 鍥炲涔嬪墠鎵�鏈夌殑鐐规挱璇锋眰
resultHolder.invokeAllResult(msg);
- }, uuid);
+ });
}
- return playResult;
}
@Override
public void play(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
- InviteTimeOutCallback timeoutCallback, String uuid) {
+ InviteTimeOutCallback timeoutCallback) {
logger.info("[鐐规挱寮�濮媇 deviceId: {}, channelId: {},鏀舵祦绔彛锛� {}, 鏀舵祦妯″紡锛歿}, SSRC: {}, SSRC鏍¢獙锛歿}", device.getDeviceId(), channelId, ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck());
// 瓒呮椂澶勭悊
@@ -279,16 +247,36 @@
}
}
}, userSetting.getPlayTimeout());
+ //绔彛鑾峰彇澶辫触鐨剆srcInfo 娌℃湁蹇呰鍙戦�佺偣鎾寚浠�
+ if (ssrcInfo.getPort() <= 0) {
+ logger.info("[鐐规挱绔彛鍒嗛厤寮傚父]锛宒eviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo);
+ dynamicTask.stop(timeOutTaskKey);
+ // 閲婃斁ssrc
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
+ streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
+
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + device.getDeviceId() + channelId);
+ msg.setData(WVPResult.fail(ErrorCode.ERROR100.getCode(), "鐐规挱绔彛鍒嗛厤寮傚父"));
+ resultHolder.invokeAllResult(msg);
+ return;
+ }
try {
cmder.playStreamCmd(mediaServerItem, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> {
logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + response.toJSONString());
dynamicTask.stop(timeOutTaskKey);
// hook鍝嶅簲
- onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId, uuid);
+ onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId);
hookEvent.response(mediaServerItemInuse, response);
logger.info("[鐐规挱鎴愬姛] deviceId: {}, channelId: {}", device.getDeviceId(), channelId);
+ String streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", ssrcInfo.getStream());
+ String path = "snap";
+ String fileName = device.getDeviceId() + "_" + channelId + ".jpg";
+ // 璇锋眰鎴浘
+ logger.info("[璇锋眰鎴浘]: " + fileName);
+ zlmresTfulUtils.getSnap(mediaServerItemInuse, streamUrl, 15, 1, path, fileName);
}, (event) -> {
ResponseEvent responseEvent = (ResponseEvent) event.event;
@@ -328,7 +316,7 @@
logger.info("[ZLM HOOK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + response.toJSONString());
dynamicTask.stop(timeOutTaskKey);
// hook鍝嶅簲
- onPublishHandlerForPlay(mediaServerItemInUse, response, device.getDeviceId(), channelId, uuid);
+ onPublishHandlerForPlay(mediaServerItemInUse, response, device.getDeviceId(), channelId);
hookEvent.response(mediaServerItemInUse, response);
});
}
@@ -364,13 +352,41 @@
}
@Override
- public void onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject response, String deviceId, String channelId, String uuid) {
+ public void onPublishHandlerForPlay(MediaServerItem mediaServerItem, JSONObject response, String deviceId, String channelId) {
+ StreamInfo streamInfo = onPublishHandler(mediaServerItem, response, deviceId, channelId);
RequestMessage msg = new RequestMessage();
- if (uuid != null) {
+ msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId);
+ if (streamInfo != null) {
+ DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
+ if (deviceChannel != null) {
+ deviceChannel.setStreamId(streamInfo.getStream());
+ storager.startPlay(deviceId, channelId, streamInfo.getStream());
+ }
+ redisCatchStorage.startPlay(streamInfo);
+
+ WVPResult wvpResult = new WVPResult();
+ wvpResult.setCode(ErrorCode.SUCCESS.getCode());
+ wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
+ wvpResult.setData(streamInfo);
+
+ msg.setData(wvpResult);
+ resultHolder.invokeAllResult(msg);
+
+ } else {
+ logger.warn("璁惧棰勮API璋冪敤澶辫触锛�");
+ msg.setData(WVPResult.fail(ErrorCode.ERROR100.getCode(), "璁惧棰勮API璋冪敤澶辫触锛�"));
+ resultHolder.invokeAllResult(msg);
+ }
+ }
+
+ private void onPublishHandlerForPlayback(MediaServerItem mediaServerItem, JSONObject response, String deviceId, String channelId, String uuid) {
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId);
+ if (!ObjectUtils.isEmpty(uuid)) {
msg.setId(uuid);
}
- msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId);
StreamInfo streamInfo = onPublishHandler(mediaServerItem, response, deviceId, channelId);
+
if (streamInfo != null) {
DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
if (deviceChannel != null) {
@@ -387,8 +403,8 @@
resultHolder.invokeAllResult(msg);
} else {
- logger.warn("璁惧棰勮API璋冪敤澶辫触锛�");
- msg.setData(WVPResult.fail(ErrorCode.ERROR100.getCode(), "璁惧棰勮API璋冪敤澶辫触锛�"));
+ logger.warn("褰曞儚鍥炴斁璋冪敤澶辫触锛�");
+ msg.setData(WVPResult.fail(ErrorCode.ERROR100.getCode(), "褰曞儚鍥炴斁璋冪敤澶辫触锛�"));
resultHolder.invokeAllResult(msg);
}
}
@@ -542,7 +558,7 @@
logger.info("[ZLM HOOK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + response.toJSONString());
dynamicTask.stop(playBackTimeOutTaskKey);
// hook鍝嶅簲
- onPublishHandlerForPlay(mediaServerItemInUse, response, device.getDeviceId(), channelId, uuid);
+ onPublishHandlerForPlayback(mediaServerItemInUse, response, device.getDeviceId(), channelId, uuid);
hookEvent.call(new InviteStreamInfo(mediaServerItem, null, eventResult.callId, "rtp", ssrcInfo.getStream()));
});
}
@@ -565,6 +581,8 @@
return result;
}
+
+
@Override
public DeferredResult<WVPResult<StreamInfo>> download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) {
Device device = storager.queryVideoDevice(deviceId);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index ffbcb42..45166de 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -221,6 +221,12 @@
streamInfoPushItemMap.put(onStreamChangedHookParam.getApp() + onStreamChangedHookParam.getStream(), onStreamChangedHookParam);
}
}
+ // 鑾峰彇鎵�鏈夋帹娴侀壌鏉冧俊鎭紝娓呯悊杩囨湡鐨�
+ List<StreamAuthorityInfo> allStreamAuthorityInfo = redisCatchStorage.getAllStreamAuthorityInfo();
+ Map<String, StreamAuthorityInfo> streamAuthorityInfoInfoMap = new HashMap<>();
+ for (StreamAuthorityInfo streamAuthorityInfo : allStreamAuthorityInfo) {
+ streamAuthorityInfoInfoMap.put(streamAuthorityInfo.getApp() + streamAuthorityInfo.getStream(), streamAuthorityInfo);
+ }
zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{
if (mediaList == null) {
return;
@@ -239,6 +245,7 @@
for (StreamPushItem streamPushItem : streamPushItems) {
pushItemMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
streamInfoPushItemMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
+ streamAuthorityInfoInfoMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
}
}
List<StreamPushItem> offlinePushItems = new ArrayList<>(pushItemMap.values());
@@ -274,6 +281,14 @@
redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineOnStreamChangedHookParam.getApp(), offlineOnStreamChangedHookParam.getStream());
}
}
+
+ Collection<StreamAuthorityInfo> streamAuthorityInfos = streamAuthorityInfoInfoMap.values();
+ if (streamAuthorityInfos.size() > 0) {
+ for (StreamAuthorityInfo streamAuthorityInfo : streamAuthorityInfos) {
+ // 绉婚櫎redis鍐呮祦鐨勪俊鎭�
+ redisCatchStorage.removeStreamAuthorityInfo(streamAuthorityInfo.getApp(), streamAuthorityInfo.getStream());
+ }
+ }
}));
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
index f9a223c..15b6d80 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -233,6 +233,8 @@
*/
StreamAuthorityInfo getStreamAuthorityInfo(String app, String stream);
+ List<StreamAuthorityInfo> getAllStreamAuthorityInfo();
+
/**
* 鍙戦�乺edis娑堟伅 鏌ヨ鎵�鏈夋帹娴佽澶囩殑鐘舵��
*/
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
index 9bf5c02..0e61692 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -25,6 +25,7 @@
"streamMode," +
"ip," +
"sdpIp," +
+ "localIp," +
"port," +
"hostAddress," +
"expires," +
@@ -54,6 +55,7 @@
"streamMode," +
"ip," +
"sdpIp," +
+ "localIp," +
"port," +
"hostAddress," +
"expires," +
@@ -80,6 +82,7 @@
"#{streamMode}," +
"#{ip}," +
"#{sdpIp}," +
+ "#{localIp}," +
"#{port}," +
"#{hostAddress}," +
"#{expires}," +
@@ -108,6 +111,7 @@
"<if test=\"firmware != null\">, firmware='${firmware}'</if>" +
"<if test=\"transport != null\">, transport='${transport}'</if>" +
"<if test=\"ip != null\">, ip='${ip}'</if>" +
+ "<if test=\"localIp != null\">, localIp='${localIp}'</if>" +
"<if test=\"port != null\">, port=${port}</if>" +
"<if test=\"hostAddress != null\">, hostAddress='${hostAddress}'</if>" +
"<if test=\"online != null\">, online=${online}</if>" +
@@ -129,6 +133,7 @@
"streamMode," +
"ip," +
"sdpIp," +
+ "localIp," +
"port," +
"hostAddress," +
"expires," +
@@ -165,6 +170,7 @@
"streamMode," +
"ip," +
"sdpIp," +
+ "localIp," +
"port," +
"hostAddress," +
"expires," +
@@ -194,6 +200,7 @@
"streamMode," +
"ip," +
"sdpIp," +
+ "localIp," +
"port," +
"hostAddress," +
"expires," +
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
index ca2e348..8cf5293 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -714,6 +714,18 @@
}
+ @Override
+ public List<StreamAuthorityInfo> getAllStreamAuthorityInfo() {
+ String scanKey = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_*_*" ;
+ List<StreamAuthorityInfo> result = new ArrayList<>();
+ List<Object> keys = RedisUtil.scan(scanKey);
+ for (Object o : keys) {
+ String key = (String) o;
+ result.add((StreamAuthorityInfo) RedisUtil.get(key));
+ }
+ return result;
+ }
+
@Override
public OnStreamChangedHookParam getStreamInfo(String app, String streamId, String mediaServerId) {
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
index 81e6249..466a503 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
@@ -1,14 +1,12 @@
package com.genersoft.iot.vmp.utils.redis;
-import java.nio.charset.Charset;
-
+import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONWriter.Feature;
+import java.nio.charset.Charset;
/**
* @description:浣跨敤fastjson瀹炵幇redis鐨勫簭鍒楀寲
@@ -31,7 +29,7 @@
if (t == null) {
return new byte[0];
}
- return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET);
+ return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName, JSONWriter.Feature.WritePairAsJavaBean).getBytes(DEFAULT_CHARSET);
}
@Override
@@ -42,4 +40,6 @@
String str = new String(bytes, DEFAULT_CHARSET);
return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
}
+
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultEx.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultEx.java
new file mode 100644
index 0000000..0b9d3d9
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultEx.java
@@ -0,0 +1,31 @@
+package com.genersoft.iot.vmp.vmanager.bean;
+
+import org.springframework.web.context.request.async.DeferredResult;
+
+public class DeferredResultEx<T> {
+
+ private DeferredResult<T> deferredResult;
+
+ private DeferredResultFilter filter;
+
+ public DeferredResultEx(DeferredResult<T> result) {
+ this.deferredResult = result;
+ }
+
+
+ public DeferredResult<T> getDeferredResult() {
+ return deferredResult;
+ }
+
+ public void setDeferredResult(DeferredResult<T> deferredResult) {
+ this.deferredResult = deferredResult;
+ }
+
+ public DeferredResultFilter getFilter() {
+ return filter;
+ }
+
+ public void setFilter(DeferredResultFilter filter) {
+ this.filter = filter;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultFilter.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultFilter.java
new file mode 100644
index 0000000..18c2240
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/DeferredResultFilter.java
@@ -0,0 +1,6 @@
+package com.genersoft.iot.vmp.vmanager.bean;
+
+public interface DeferredResultFilter {
+
+ Object handler(Object o);
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
index c93f026..6ad1ed7 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
@@ -4,7 +4,7 @@
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "缁熶竴杩斿洖缁撴灉")
-public class WVPResult<T> {
+public class WVPResult<T> implements Cloneable{
public WVPResult() {
}
@@ -63,4 +63,9 @@
public void setData(T data) {
this.data = data;
}
+
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index 41424fe..68a8133 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -1,42 +1,37 @@
package com.genersoft.iot.vmp.vmanager.gb28181.play;
import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
-import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
import com.genersoft.iot.vmp.service.IMediaService;
import com.genersoft.iot.vmp.service.IPlayService;
-
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
+import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
+import javax.servlet.http.HttpServletRequest;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
import java.text.ParseException;
@@ -78,19 +73,63 @@
@Autowired
private IMediaServerService mediaServerService;
+ @Autowired
+ private UserSetting userSetting;
+
@Operation(summary = "寮�濮嬬偣鎾�")
@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
@Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true)
@GetMapping("/start/{deviceId}/{channelId}")
- public DeferredResult<WVPResult<StreamInfo>> play(@PathVariable String deviceId,
- @PathVariable String channelId) {
+ public DeferredResult<WVPResult<StreamInfo>> play(HttpServletRequest request, @PathVariable String deviceId,
+ @PathVariable String channelId) {
// 鑾峰彇鍙敤鐨剒lm
Device device = storager.queryVideoDevice(deviceId);
MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
- PlayResult playResult = playService.play(newMediaServerItem, deviceId, channelId, null, null, null);
- return playResult.getResult();
+ RequestMessage msg = new RequestMessage();
+ String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
+ boolean exist = resultHolder.exist(key, null);
+ msg.setKey(key);
+ String uuid = UUID.randomUUID().toString();
+ msg.setId(uuid);
+ DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
+ DeferredResultEx<WVPResult<StreamInfo>> deferredResultEx = new DeferredResultEx<>(result);
+
+ result.onTimeout(()->{
+ logger.info("鐐规挱鎺ュ彛绛夊緟瓒呮椂");
+ // 閲婃斁rtpserver
+ WVPResult<StreamInfo> wvpResult = new WVPResult<>();
+ wvpResult.setCode(ErrorCode.ERROR100.getCode());
+ wvpResult.setMsg("鐐规挱瓒呮椂");
+ msg.setData(wvpResult);
+ resultHolder.invokeResult(msg);
+ });
+
+ // TODO 鍦ㄧ偣鎾湭鎴愬姛鐨勬儏鍐典笅鍦ㄦ璋冪敤鎺ュ彛鐐规挱浼氬鑷磋繑鍥炵殑娴佸湴鍧�ip閿欒
+ deferredResultEx.setFilter(result1 -> {
+ WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1;
+ WVPResult<StreamInfo> clone = null;
+ try {
+ clone = (WVPResult<StreamInfo>)wvpResult1.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeException(e);
+ }
+ if (clone.getCode() == ErrorCode.SUCCESS.getCode()) {
+ StreamInfo data = clone.getData().clone();
+ data.channgeStreamIp(request.getLocalName());
+ clone.setData(data);
+ }
+ return clone;
+ });
+
+ // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
+ resultHolder.put(key, uuid, deferredResultEx);
+
+ if (!exist) {
+ playService.play(newMediaServerItem, deviceId, channelId, null, null, null);
+ }
+ return result;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
index d09e565..6b8550d 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
@@ -158,25 +158,25 @@
@GetMapping(value = "/restart")
@ResponseBody
public void restart() {
- taskExecutor.execute(()-> {
- try {
- Thread.sleep(3000);
- SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
- SipStackImpl stack = (SipStackImpl) up.getSipStack();
- stack.stop();
- Iterator listener = stack.getListeningPoints();
- while (listener.hasNext()) {
- stack.deleteListeningPoint((ListeningPoint) listener.next());
- }
- Iterator providers = stack.getSipProviders();
- while (providers.hasNext()) {
- stack.deleteSipProvider((SipProvider) providers.next());
- }
- VManageBootstrap.restart();
- } catch (InterruptedException | ObjectInUseException e) {
- throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());
- }
- });
+// taskExecutor.execute(()-> {
+// try {
+// Thread.sleep(3000);
+// SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
+// SipStackImpl stack = (SipStackImpl) up.getSipStack();
+// stack.stop();
+// Iterator listener = stack.getListeningPoints();
+// while (listener.hasNext()) {
+// stack.deleteListeningPoint((ListeningPoint) listener.next());
+// }
+// Iterator providers = stack.getSipProviders();
+// while (providers.hasNext()) {
+// stack.deleteSipProvider((SipProvider) providers.next());
+// }
+// VManageBootstrap.restart();
+// } catch (InterruptedException | ObjectInUseException e) {
+// throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());
+// }
+// });
};
@Operation(summary = "鑾峰彇绯荤粺淇℃伅淇℃伅")
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
index 499b161..95b6cf3 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
@@ -6,22 +6,17 @@
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.service.IMediaServerService;
-import com.genersoft.iot.vmp.service.IMediaService;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.service.IStreamProxyService;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import com.github.pagehelper.PageInfo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@SuppressWarnings("rawtypes")
@@ -63,7 +58,7 @@
})
@PostMapping(value = "/save")
@ResponseBody
- public StreamInfo save(@RequestBody StreamProxyItem param){
+ public StreamInfo save(@RequestBody StreamProxyItem param){
logger.info("娣诲姞浠g悊锛� " + JSONObject.toJSONString(param));
if (ObjectUtils.isEmpty(param.getMediaServerId())) {
param.setMediaServerId("auto");
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
index 0f003c7..ab769f5 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
@@ -112,7 +112,7 @@
return resultDeferredResult;
}
MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
- PlayResult play = playService.play(newMediaServerItem, serial, code, (mediaServerItem, response)->{
+ playService.play(newMediaServerItem, serial, code, (mediaServerItem, response)->{
StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(serial, code);
JSONObject result = new JSONObject();
result.put("StreamID", streamInfo.getStream());
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index 3294e74..3303915 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -105,8 +105,6 @@
id: 44010200492000000001
# [鍙�塢 榛樿璁惧璁よ瘉瀵嗙爜锛屽悗缁墿灞曚娇鐢ㄨ澶囧崟鐙瘑鐮�, 绉婚櫎瀵嗙爜灏嗕笉杩涜鏍¢獙
password: admin123
- # [鍙�塢 蹇冭烦瓒呮椂鏃堕棿锛� 寤鸿璁剧疆涓哄績璺冲懆鏈熺殑涓夊��
- keepalive-timeout: 255
# [鍙�塢 鍥芥爣绾ц仈娉ㄥ唽澶辫触锛屽啀娆″彂璧锋敞鍐岀殑鏃堕棿闂撮殧銆� 榛樿60绉�
register-time-interval: 60
# [鍙�塢 浜戝彴鎺у埗閫熷害
@@ -188,6 +186,8 @@
logInDatebase: true
# 浣跨敤鎺ㄦ祦鐘舵�佷綔涓烘帹娴侀�氶亾鐘舵��
use-pushing-as-status: true
+ # 浣跨敤鏉ユ簮璇锋眰ip浣滀负streamIp
+ use-source-ip-as-stream-ip: true
# 鎸夐渶鎷夋祦, true锛氭湁浜鸿鐪嬫媺娴侊紝鏃犱汉瑙傜湅閲婃斁锛� false锛氭媺璧峰悗涓嶈嚜鍔ㄩ噴鏀�
stream-on-demand: true
# 鎺ㄦ祦閴存潈锛� 榛樿寮�鍚�
diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue
index 0df4b02..e640d6f 100644
--- a/web_src/src/components/dialog/devicePlayer.vue
+++ b/web_src/src/components/dialog/devicePlayer.vue
@@ -53,93 +53,93 @@
鏇村鍦板潃<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown" >
- <el-dropdown-item :command="streamInfo.flv">
+ <el-dropdown-item :command="streamInfo.flv.url">
<el-tag >FLV:</el-tag>
- <span>{{ streamInfo.flv }}</span>
+ <span>{{ streamInfo.flv.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.https_flv">
+ <el-dropdown-item :command="streamInfo.https_flv.url">
<el-tag >FLV(https):</el-tag>
- <span>{{ streamInfo.https_flv }}</span>
+ <span>{{ streamInfo.https_flv.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.ws_flv">
+ <el-dropdown-item :command="streamInfo.ws_flv.url">
<el-tag >FLV(ws):</el-tag>
- <span >{{ streamInfo.ws_flv }}</span>
+ <span >{{ streamInfo.ws_flv.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.wss_flv">
+ <el-dropdown-item :command="streamInfo.wss_flv.url">
<el-tag >FLV(wss):</el-tag>
- <span>{{ streamInfo.wss_flv }}</span>
+ <span>{{ streamInfo.wss_flv.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.fmp4">
+ <el-dropdown-item :command="streamInfo.fmp4.url">
<el-tag >FMP4:</el-tag>
- <span>{{ streamInfo.fmp4 }}</span>
+ <span>{{ streamInfo.fmp4.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.https_fmp4">
+ <el-dropdown-item :command="streamInfo.https_fmp4.url">
<el-tag >FMP4(https):</el-tag>
- <span>{{ streamInfo.https_fmp4 }}</span>
+ <span>{{ streamInfo.https_fmp4.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.ws_fmp4">
+ <el-dropdown-item :command="streamInfo.ws_fmp4.url">
<el-tag >FMP4(ws):</el-tag>
- <span>{{ streamInfo.ws_fmp4 }}</span>
+ <span>{{ streamInfo.ws_fmp4.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.wss_fmp4">
+ <el-dropdown-item :command="streamInfo.wss_fmp4.url">
<el-tag >FMP4(wss):</el-tag>
- <span>{{ streamInfo.wss_fmp4 }}</span>
+ <span>{{ streamInfo.wss_fmp4.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.hls">
+ <el-dropdown-item :command="streamInfo.hls.url">
<el-tag>HLS:</el-tag>
- <span>{{ streamInfo.hls }}</span>
+ <span>{{ streamInfo.hls.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.https_hls">
+ <el-dropdown-item :command="streamInfo.https_hls.url">
<el-tag >HLS(https):</el-tag>
- <span>{{ streamInfo.https_hls }}</span>
+ <span>{{ streamInfo.https_hls.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.ws_hls">
+ <el-dropdown-item :command="streamInfo.ws_hls.url">
<el-tag >HLS(ws):</el-tag>
- <span>{{ streamInfo.ws_hls }}</span>
+ <span>{{ streamInfo.ws_hls.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.wss_hls">
+ <el-dropdown-item :command="streamInfo.wss_hls.url">
<el-tag >HLS(wss):</el-tag>
- <span>{{ streamInfo.wss_hls }}</span>
+ <span>{{ streamInfo.wss_hls.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.ts">
+ <el-dropdown-item :command="streamInfo.ts.url">
<el-tag>TS:</el-tag>
- <span>{{ streamInfo.ts }}</span>
+ <span>{{ streamInfo.ts.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.https_ts">
+ <el-dropdown-item :command="streamInfo.https_ts.url">
<el-tag>TS(https):</el-tag>
- <span>{{ streamInfo.https_ts }}</span>
+ <span>{{ streamInfo.https_ts.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.ws_ts">
+ <el-dropdown-item :command="streamInfo.ws_ts.url">
<el-tag>TS(ws):</el-tag>
- <span>{{ streamInfo.ws_ts }}</span>
+ <span>{{ streamInfo.ws_ts.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.wss_ts">
+ <el-dropdown-item :command="streamInfo.wss_ts.url">
<el-tag>TS(wss):</el-tag>
- <span>{{ streamInfo.wss_ts }}</span>
+ <span>{{ streamInfo.wss_ts.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.rtc">
+ <el-dropdown-item :command="streamInfo.rtc.url">
<el-tag >RTC:</el-tag>
- <span>{{ streamInfo.rtc }}</span>
+ <span>{{ streamInfo.rtc.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.rtcs">
+ <el-dropdown-item :command="streamInfo.rtcs.url">
<el-tag >RTCS:</el-tag>
<span>{{ streamInfo.rtcs }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.rtmp">
+ <el-dropdown-item :command="streamInfo.rtmp.url">
<el-tag >RTMP:</el-tag>
- <span>{{ streamInfo.rtmp }}</span>
+ <span>{{ streamInfo.rtmp.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.rtmps">
+ <el-dropdown-item :command="streamInfo.rtmps.url">
<el-tag >RTMPS:</el-tag>
- <span>{{ streamInfo.rtmps }}</span>
+ <span>{{ streamInfo.rtmps.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.rtsp">
+ <el-dropdown-item :command="streamInfo.rtsp.url">
<el-tag >RTSP:</el-tag>
- <span>{{ streamInfo.rtsp }}</span>
+ <span>{{ streamInfo.rtsp.url }}</span>
</el-dropdown-item>
- <el-dropdown-item :command="streamInfo.rtsps">
+ <el-dropdown-item :command="streamInfo.rtsps.url">
<el-tag >RTSPS:</el-tag>
- <span>{{ streamInfo.rtsps }}</span>
+ <span>{{ streamInfo.rtsps.url }}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
@@ -450,9 +450,9 @@
getUrlByStreamInfo(){
console.log(this.streamInfo)
if (location.protocol === "https:") {
- this.videoUrl = this.streamInfo[this.player[this.activePlayer][1]]
+ this.videoUrl = this.streamInfo[this.player[this.activePlayer][1]].url
}else {
- this.videoUrl = this.streamInfo[this.player[this.activePlayer][0]]
+ this.videoUrl = this.streamInfo[this.player[this.activePlayer][0]].url
}
return this.videoUrl;
diff --git a/web_src/src/components/live.vue b/web_src/src/components/live.vue
index 4a7af49..fcf1d59 100644
--- a/web_src/src/components/live.vue
+++ b/web_src/src/components/live.vue
@@ -140,9 +140,9 @@
if (res.data.code === 0 && res.data.data) {
let videoUrl;
if (location.protocol === "https:") {
- videoUrl = res.data.data.wss_flv;
+ videoUrl = res.data.data.wss_flv.url;
} else {
- videoUrl = res.data.data.ws_flv;
+ videoUrl = res.data.data.ws_flv.url;
}
itemData.playUrl = videoUrl;
that.setPlayUrl(videoUrl, idxTmp);
--
Gitblit v1.8.0