From bc431e429026d5efb9d404767f76a0724978d40d Mon Sep 17 00:00:00 2001 From: Cloud User Date: Fri, 15 Sep 2023 22:39:08 +0800 Subject: [PATCH] fix-use-source-ip-as-stream-ip --- .../genersoft/iot/vmp/common/StreamInfo.java | 63 +++++++++++++++++++ .../genersoft/iot/vmp/common/StreamURL.java | 6 +- .../vmanager/gb28181/play/PlayController.java | 12 +++- .../gb28181/playback/PlaybackController.java | 12 +++- 4 files changed, 90 insertions(+), 3 deletions(-) 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 cde235bc..70718c7a 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java @@ -523,6 +523,69 @@ public class StreamInfo implements Serializable, Cloneable{ StreamInfo instance = null; try{ instance = (StreamInfo)super.clone(); + if (this.flv != null) { + instance.flv=this.flv.clone(); + } + if (this.ws_flv != null ){ + instance.ws_flv= this.ws_flv.clone(); + } + if (this.hls != null ) { + instance.hls= this.hls.clone(); + } + if (this.ws_hls != null ) { + instance.ws_hls= this.ws_hls.clone(); + } + if (this.ts != null ) { + instance.ts= this.ts.clone(); + } + if (this.ws_ts != null ) { + instance.ws_ts= this.ws_ts.clone(); + } + if (this.fmp4 != null ) { + instance.fmp4= this.fmp4.clone(); + } + if (this.ws_fmp4 != null ) { + instance.ws_fmp4= this.ws_fmp4.clone(); + } + if (this.rtc != null ) { + instance.rtc= this.rtc.clone(); + } + if (this.https_flv != null) { + instance.https_flv= this.https_flv.clone(); + } + if (this.wss_flv != null) { + instance.wss_flv= this.wss_flv.clone(); + } + if (this.https_hls != null) { + instance.https_hls= this.https_hls.clone(); + } + if (this.wss_hls != null) { + instance.wss_hls= this.wss_hls.clone(); + } + if (this.wss_ts != null) { + instance.wss_ts= this.wss_ts.clone(); + } + if (this.https_fmp4 != null) { + instance.https_fmp4= this.https_fmp4.clone(); + } + if (this.wss_fmp4 != null) { + instance.wss_fmp4= this.wss_fmp4.clone(); + } + if (this.rtcs != null) { + instance.rtcs= this.rtcs.clone(); + } + if (this.rtsp != null) { + instance.rtsp= this.rtsp.clone(); + } + if (this.rtsps != null) { + instance.rtsps= this.rtsps.clone(); + } + if (this.rtmp != null) { + instance.rtmp= this.rtmp.clone(); + } + if (this.rtmps != null) { + instance.rtmps= this.rtmps.clone(); + } }catch(CloneNotSupportedException e) { e.printStackTrace(); } diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java b/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java index eecf469f..40bd7e25 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java +++ b/src/main/java/com/genersoft/iot/vmp/common/StreamURL.java @@ -6,7 +6,7 @@ import java.io.Serializable; @Schema(description = "流地址信息") -public class StreamURL implements Serializable { +public class StreamURL implements Serializable,Cloneable { @Schema(description = "协议") private String protocol; @@ -77,4 +77,8 @@ public class StreamURL implements Serializable { return null; } } + @Override + public StreamURL clone() throws CloneNotSupportedException { + return (StreamURL) 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 3d233dcf..6db7e4b1 100755 --- 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 @@ -40,6 +40,8 @@ import org.springframework.web.context.request.async.DeferredResult; import javax.servlet.http.HttpServletRequest; import javax.sip.InvalidArgumentException; import javax.sip.SipException; +import java.net.MalformedURLException; +import java.net.URL; import java.text.ParseException; import java.util.List; import java.util.UUID; @@ -128,7 +130,15 @@ public class PlayController { if (data != null) { StreamInfo streamInfo = (StreamInfo)data; if (userSetting.getUseSourceIpAsStreamIp()) { - streamInfo.channgeStreamIp(request.getLocalAddr()); + streamInfo=streamInfo.clone();//深拷贝 + String host; + try { + URL url=new URL(request.getRequestURL().toString()); + host=url.getHost(); + } catch (MalformedURLException e) { + host=request.getLocalAddr(); + } + streamInfo.channgeStreamIp(host); } wvpResult.setData(new StreamContent(streamInfo)); } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java index d3225a21..63299b27 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java @@ -34,6 +34,8 @@ import org.springframework.web.context.request.async.DeferredResult; import javax.servlet.http.HttpServletRequest; import javax.sip.InvalidArgumentException; import javax.sip.SipException; +import java.net.MalformedURLException; +import java.net.URL; import java.text.ParseException; import java.util.UUID; @@ -99,7 +101,15 @@ public class PlaybackController { if (data != null) { StreamInfo streamInfo = (StreamInfo)data; if (userSetting.getUseSourceIpAsStreamIp()) { - streamInfo.channgeStreamIp(request.getLocalAddr()); + streamInfo=streamInfo.clone();//深拷贝 + String host; + try { + URL url=new URL(request.getRequestURL().toString()); + host=url.getHost(); + } catch (MalformedURLException e) { + host=request.getLocalAddr(); + } + streamInfo.channgeStreamIp(host); } wvpResult.setData(new StreamContent(streamInfo)); }