mirror of
https://gitee.com/pan648540858/wvp-GB28181-pro.git
synced 2026-06-17 00:47:49 +08:00
fix: 级联点播下级自定义SSRC后同步刷新RTP鉴权key
当 use-custom-ssrc-for-parent-invite=true 时,下级平台可在 200 OK SDP 中返回自定义 SSRC。此前仅在开收流时按原始 SSRC 写入一次 Redis 鉴权 key,导致 ZLM on_publish 以实际 SSRC 查 Redis 时鉴权失败。 新增 IReceiveRtpServerService.refreshAuthenticateInfo(),在 PlayServiceImpl.InviteOKHandler 解析出最终 SSRC 后,如与原始值不 一致,先刷新 Redis 鉴权 key,再继续现有 SSRC 更新流程。覆盖点播、 回放、下载三种场景。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
9775a24c6d
commit
75c38d6c9a
@ -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()) {
|
||||
// 多端口
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user