diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java index 221b1c630..47af047e9 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java @@ -859,6 +859,9 @@ public class PlayServiceImpl implements IPlayService { } }else { log.info("[Invite 200OK] 收到invite 200, 发现下级自定义了ssrc: {}", ssrcInResponse); + String oldStreamId = String.format("%08x", Long.parseLong(ssrcInfo.getSsrc())).toUpperCase(); + String newStreamId = String.format("%08x", Long.parseLong(ssrcInResponse)).toUpperCase(); + receiveRtpServerService.refreshAuthenticateInfo(oldStreamId, newStreamId); // ssrc 不一致 if (mediaServerItem.isRtpEnable()) { // 多端口 diff --git a/src/main/java/com/genersoft/iot/vmp/service/IReceiveRtpServerService.java b/src/main/java/com/genersoft/iot/vmp/service/IReceiveRtpServerService.java index b8e7cab30..8819ff1ff 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IReceiveRtpServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IReceiveRtpServerService.java @@ -39,4 +39,6 @@ public interface IReceiveRtpServerService { void addAuthenticateInfo(String streamId, String streamReplace, Boolean enableAudio, Boolean enableMp4, Integer mp4MaxSecond); ResultForOnPublish getAuthenticateInfo(String streamId); + + void refreshAuthenticateInfo(String oldStreamId, String newStreamId); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/RtpServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/RtpServerServiceImpl.java index 7a5030b6f..8c4aa0cf2 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/RtpServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/RtpServerServiceImpl.java @@ -406,4 +406,22 @@ public class RtpServerServiceImpl implements IReceiveRtpServerService { } return null; } + + @Override + public void refreshAuthenticateInfo(String oldStreamId, String newStreamId) { + if (oldStreamId == null || newStreamId == null || oldStreamId.equals(newStreamId)) { + return; + } + String oldKey = String.format("%s:%s", VideoManagerConstants.RTP_AUTHENTICATE, oldStreamId); + Object obj = redisTemplate.opsForValue().get(oldKey); + if (obj instanceof ResultForOnPublish) { + String newKey = String.format("%s:%s", VideoManagerConstants.RTP_AUTHENTICATE, newStreamId); + redisTemplate.opsForValue().set(newKey, obj); + redisTemplate.expire(newKey, 60, TimeUnit.SECONDS); + redisTemplate.delete(oldKey); + log.info("[刷新RTP鉴权信息] {} -> {}", oldStreamId, newStreamId); + } else { + log.warn("[刷新RTP鉴权信息] 未找到旧key: {}", oldKey); + } + } }