From c859fe228ccc7d9e83d89e3c2513ae3548d4425f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 30 九月 2022 09:25:15 +0800
Subject: [PATCH] 更新文档
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java | 58 ++++++++++++++++++++++++++++++++++++----------------------
1 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java
index 571186f..3e7fbeb 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.conf.DynamicTask;
+import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
@@ -14,6 +15,7 @@
import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.bean.RequestPushStreamMsg;
import com.genersoft.iot.vmp.service.redisMsg.RedisGbPlayMsgListener;
@@ -21,7 +23,6 @@
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.stack.SIPDialog;
-import com.genersoft.iot.vmp.utils.SerializeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
@@ -29,11 +30,15 @@
import org.springframework.stereotype.Component;
import javax.sip.*;
+import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
+import javax.sip.SipException;
import javax.sip.address.SipURI;
import javax.sip.header.CallIdHeader;
import javax.sip.header.FromHeader;
import javax.sip.header.HeaderAddress;
+import java.text.ParseException;
+import javax.sip.header.ToHeader;
import java.text.ParseException;
import java.util.*;
@@ -78,6 +83,9 @@
private ISIPCommander cmder;
@Autowired
+ private IDeviceService deviceService;
+
+ @Autowired
private ISIPCommanderForPlatform commanderForPlatform;
@Autowired
@@ -102,11 +110,15 @@
// 鍙栨秷璁剧疆鐨勮秴鏃朵换鍔�
dynamicTask.stop(callIdHeader.getCallId());
String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
- SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId());
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, null, callIdHeader.getCallId());
+ if (sendRtpItem == null) {
+ logger.warn("[鏀跺埌ACK]锛氭湭鎵惧埌閫氶亾({})鐨勬帹娴佷俊鎭�", channelId);
+ return;
+ }
String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
- logger.info("鏀跺埌ACK锛宺tp/{}寮�濮嬪悜涓婄骇鎺ㄦ祦, 鐩爣 {}:{}锛孲SRC={}", sendRtpItem.getStreamId(), sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc());
- Map<String, Object> param = new HashMap<>();
+ logger.info("鏀跺埌ACK锛宺tp/{}寮�濮嬪悜涓婄骇鎺ㄦ祦, 鐩爣={}:{}锛孲SRC={}", sendRtpItem.getStreamId(), sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc());
+ Map<String, Object> param = new HashMap<>(12);
param.put("vhost","__defaultVhost__");
param.put("app",sendRtpItem.getApp());
param.put("stream",sendRtpItem.getStreamId());
@@ -115,7 +127,7 @@
param.put("pt", sendRtpItem.getPt());
param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
- if (!sendRtpItem.isTcp() && parentPlatform.isRtcp()) {
+ if (!sendRtpItem.isTcp() && parentPlatform != null && parentPlatform.isRtcp()) {
// 寮�鍚痳tcp淇濇椿
param.put("udp_rtcp_timeout", "1");
}
@@ -133,29 +145,28 @@
if (jsonObject == null) {
logger.error("RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟");
} else if (jsonObject.getInteger("code") == 0) {
-
- if (sendRtpItem.isOnlyAudio()) {
- AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
- audioBroadcastCatch.setStatus(AudioBroadcastCatchStatus.Ok);
- audioBroadcastCatch.setDialog((SIPDialog) evt.getDialog());
- audioBroadcastCatch.setRequest((SIPRequest) evt.getRequest());
- audioBroadcastManager.update(audioBroadcastCatch);
- String waiteStreamTimeoutTaskKey = "waite-stream-" + audioBroadcastCatch.getDeviceId() + audioBroadcastCatch.getChannelId();
- dynamicTask.stop(waiteStreamTimeoutTaskKey);
- }
logger.info("RTP鎺ㄦ祦鎴愬姛[ {}/{} ]锛寋}->{}:{}, ", param.get("app"), param.get("stream"), jsonObject.getString("local_port"), param.get("dst_url"), param.get("dst_port"));
} else {
logger.error("RTP鎺ㄦ祦澶辫触: {}, 鍙傛暟锛歿}", jsonObject.getString("msg"), JSONObject.toJSON(param));
if (sendRtpItem.isOnlyAudio()) {
// 璇煶瀵硅
- try {
- cmder.streamByeCmd((SIPDialog) evt.getDialog(), sendRtpItem.getChannelId(), (SIPRequest) evt.getRequest(), null);
- } catch (SipException | ParseException | InvalidArgumentException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍋滄璇煶瀵硅: {}", e.getMessage());
+ Device device = deviceService.queryDevice(platformGbId);
+ if (device != null) {
+ try {
+ cmder.streamByeCmd(device, sendRtpItem.getChannelId(), sendRtpItem.getStreamId(), null);
+ } catch (SipException | ParseException | InvalidArgumentException |
+ SsrcTransactionNotFoundException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鍋滄璇煶瀵硅: {}", e.getMessage());
+ }
}
+
} else {
// 鍚戜笂绾у钩鍙�
- commanderForPlatform.streamByeCmd(parentPlatform, callIdHeader.getCallId());
+ try {
+ commanderForPlatform.streamByeCmd(parentPlatform, callIdHeader.getCallId());
+ } catch (SipException | InvalidArgumentException | ParseException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈锛� 鍥炲BYE: {}", e.getMessage());
+ }
}
if (mediaInfo == null) {
RequestPushStreamMsg requestPushStreamMsg = RequestPushStreamMsg.getInstance(
@@ -171,7 +182,6 @@
}
- }
}
}
private void startSendRtpStreamHand(RequestEvent evt, SendRtpItem sendRtpItem, ParentPlatform parentPlatform,
@@ -187,7 +197,11 @@
// TODO 鍙兘鏄闊冲璁�
}else {
// 鍚戜笂绾у钩鍙�
- commanderForPlatform.streamByeCmd(parentPlatform, callIdHeader.getCallId());
+ try {
+ commanderForPlatform.streamByeCmd(parentPlatform, callIdHeader.getCallId());
+ } catch (SipException | InvalidArgumentException | ParseException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 鍙戦�丅YE: {}", e.getMessage());
+ }
}
}
}
--
Gitblit v1.8.0