From 4d9d697e40695bb08b7e958de5cc0e98f5fb1f69 Mon Sep 17 00:00:00 2001 From: xiaoQQya Date: Mon, 7 Aug 2023 15:21:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(play):=20=E4=BF=AE=E5=A4=8D=E5=8D=95?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E6=8E=A8=E6=B5=81=E4=B8=8B=E7=BA=A7=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20ssrc=20=E6=97=B6,=20=E7=82=B9=E6=92=AD?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E4=BA=8B=E5=8A=A1=E6=9C=AA=E6=89=BE=E5=88=B0?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 点播超时移除点播事务信息时使用的是 ssrcInfo 中的 ssrc, 下级平台自定义 ssrc 修正时未修改 ssrcInfo 中的数据, 所以在点播超时时找不到对应的点播事务信息 --- .../iot/vmp/service/impl/PlayServiceImpl.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 cf8bdd240..aec5cd0c1 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 @@ -231,7 +231,6 @@ public class PlayServiceImpl implements IPlayService { mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream()); streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); - mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream()); // 取消订阅消息监听 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId()); subscribe.removeSubscribe(hookSubscribe); @@ -626,11 +625,15 @@ public class PlayServiceImpl implements IPlayService { } }else { if (ssrcInResponse != null) { - // 单端口 - // 重新订阅流上线 + // 单端口 ssrc 更新 + logger.info("[Invite 200OK] SSRC修正 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse); + // 释放 ssrc + mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); + // 移除订阅 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId()); subscribe.removeSubscribe(hookSubscribe); + // 移除事务 SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(inviteInfo.getDeviceId(), inviteInfo.getChannelId(), null, inviteInfo.getStream()); streamSession.remove(inviteInfo.getDeviceId(), @@ -639,9 +642,16 @@ public class PlayServiceImpl implements IPlayService { String stream = String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase(); hookSubscribe.getContent().put("stream", stream); + // 更新点播信息 inviteStreamService.updateInviteInfoForStream(inviteInfo, stream); + // 更新事务 streamSession.put(device.getDeviceId(), channelId, ssrcTransaction.getCallId(), stream, ssrcInResponse, mediaServerItem.getId(), (SIPResponse) responseEvent.getResponse(), inviteSessionType); + // 更新 ssrc + ssrcInfo.setSsrc(ssrcInResponse); + ssrcInfo.setStream(stream); + inviteInfo.setSsrcInfo(ssrcInfo); + inviteInfo.setStream(stream); subscribe.addSubscribe(hookSubscribe, (mediaServerItemInUse, hookParam) -> { logger.info("[Invite 200OK] ssrc修正后收到订阅消息: " + hookParam); dynamicTask.stop(timeOutTaskKey);