From 70c20364af15fce16992fce499efc623823ce221 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 22 九月 2022 14:10:26 +0800
Subject: [PATCH] 修复流注销时移除流认证信息
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java | 112 ++++++++++++++++++++++++++-----------------------------
1 files changed, 53 insertions(+), 59 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
index 706d422..4211417 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -78,73 +78,67 @@
@Override
public void process(RequestEvent evt) {
try {
- responseAck(evt, Response.OK);
- Dialog dialog = evt.getDialog();
+ responseAck(getServerTransaction(evt), Response.OK);
CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
- if (dialog == null) {
- return;
- }
- if (dialog.getState().equals(DialogState.TERMINATED)) {
- String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
- String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
- SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId());
- logger.info("鏀跺埌bye, [{}/{}]", platformGbId, channelId);
- if (sendRtpItem != null){
- String streamId = sendRtpItem.getStreamId();
- Map<String, Object> param = new HashMap<>();
- param.put("vhost","__defaultVhost__");
- param.put("app",sendRtpItem.getApp());
- param.put("stream",streamId);
- param.put("ssrc",sendRtpItem.getSsrc());
- logger.info("鏀跺埌bye:鍋滄鍚戜笂绾ф帹娴侊細" + streamId);
- MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
- redisCatchStorage.deleteSendRTPServer(platformGbId, channelId, callIdHeader.getCallId(), null);
- zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
- int totalReaderCount = zlmrtpServerFactory.totalReaderCount(mediaInfo, sendRtpItem.getApp(), streamId);
- if (totalReaderCount <= 0) {
- logger.info("鏀跺埌bye: {} 鏃犲叾瀹冭鐪嬭�咃紝閫氱煡璁惧鍋滄鎺ㄦ祦", streamId);
- if (sendRtpItem.getPlayType().equals(InviteStreamType.PLAY)) {
- cmder.streamByeCmd(sendRtpItem.getDeviceId(), channelId, streamId, null);
- }
- if (sendRtpItem.getPlayType().equals(InviteStreamType.PUSH)) {
- MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(0,
- sendRtpItem.getApp(), sendRtpItem.getStreamId(), sendRtpItem.getChannelId(),
- sendRtpItem.getPlatformId(), null, null, sendRtpItem.getMediaServerId());
- redisCatchStorage.sendStreamPushRequestedMsg(messageForPushChannel);
- }
+ String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
+ String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId());
+ logger.info("[鏀跺埌bye] {}/{}", platformGbId, channelId);
+ if (sendRtpItem != null){
+ String streamId = sendRtpItem.getStreamId();
+ Map<String, Object> param = new HashMap<>();
+ param.put("vhost","__defaultVhost__");
+ param.put("app",sendRtpItem.getApp());
+ param.put("stream",streamId);
+ param.put("ssrc",sendRtpItem.getSsrc());
+ logger.info("[鏀跺埌bye] 鍋滄鍚戜笂绾ф帹娴侊細{}", streamId);
+ MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
+ redisCatchStorage.deleteSendRTPServer(platformGbId, channelId, callIdHeader.getCallId(), null);
+ zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
+ int totalReaderCount = zlmrtpServerFactory.totalReaderCount(mediaInfo, sendRtpItem.getApp(), streamId);
+ if (totalReaderCount <= 0) {
+ logger.info("[鏀跺埌bye] {} 鏃犲叾瀹冭鐪嬭�咃紝閫氱煡璁惧鍋滄鎺ㄦ祦", streamId);
+ if (sendRtpItem.getPlayType().equals(InviteStreamType.PLAY)) {
+ cmder.streamByeCmd(sendRtpItem.getDeviceId(), channelId, streamId, null);
+ }
+ if (sendRtpItem.getPlayType().equals(InviteStreamType.PUSH)) {
+ MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(0,
+ sendRtpItem.getApp(), sendRtpItem.getStreamId(), sendRtpItem.getChannelId(),
+ sendRtpItem.getPlatformId(), null, null, sendRtpItem.getMediaServerId());
+ redisCatchStorage.sendStreamPushRequestedMsg(messageForPushChannel);
}
}
- // 鍙兘鏄澶囦富鍔ㄥ仠姝�
- Device device = storager.queryVideoDeviceByChannelId(platformGbId);
- if (device != null) {
- storager.stopPlay(device.getDeviceId(), channelId);
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
- if (streamInfo != null) {
- redisCatchStorage.stopPlay(streamInfo);
- mediaServerService.closeRTPServer(device.getDeviceId(), channelId, streamInfo.getStream());
- }
- SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
- if (ssrcTransactionForPlay != null){
- SIPDialog dialogForPlay = (SIPDialog) SerializeUtils.deSerialize(ssrcTransactionForPlay.getDialog());
- if (dialogForPlay.getCallId().getCallId().equals(callIdHeader.getCallId())){
- // 閲婃斁ssrc
- MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransactionForPlay.getMediaServerId());
- if (mediaServerItem != null) {
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransactionForPlay.getSsrc());
- }
- streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlay.getStream());
- }
- }
- SsrcTransaction ssrcTransactionForPlayBack = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, callIdHeader.getCallId(), null);
- if (ssrcTransactionForPlayBack != null) {
+ }
+ // 鍙兘鏄澶囦富鍔ㄥ仠姝�
+ Device device = storager.queryVideoDeviceByChannelId(platformGbId);
+ if (device != null) {
+ storager.stopPlay(device.getDeviceId(), channelId);
+ StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
+ if (streamInfo != null) {
+ redisCatchStorage.stopPlay(streamInfo);
+ mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream());
+ }
+ SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
+ if (ssrcTransactionForPlay != null){
+ SIPDialog dialogForPlay = (SIPDialog) SerializeUtils.deSerialize(ssrcTransactionForPlay.getDialog());
+ if (dialogForPlay.getCallId().getCallId().equals(callIdHeader.getCallId())){
// 閲婃斁ssrc
- MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransactionForPlayBack.getMediaServerId());
+ MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransactionForPlay.getMediaServerId());
if (mediaServerItem != null) {
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransactionForPlayBack.getSsrc());
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransactionForPlay.getSsrc());
}
- streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlayBack.getStream());
+ streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlay.getStream());
}
}
+ SsrcTransaction ssrcTransactionForPlayBack = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, callIdHeader.getCallId(), null);
+ if (ssrcTransactionForPlayBack != null) {
+ // 閲婃斁ssrc
+ MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransactionForPlayBack.getMediaServerId());
+ if (mediaServerItem != null) {
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransactionForPlayBack.getSsrc());
+ }
+ streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlayBack.getStream());
+ }
}
} catch (SipException e) {
e.printStackTrace();
--
Gitblit v1.8.0