From 038d360dd4f2dd3c06f5d97dc66ed13fd78de212 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 27 六月 2022 09:38:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/rtc' into commercial
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java | 55 ++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 44 insertions(+), 11 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 af61ed3..85ee647 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
@@ -4,9 +4,8 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.DynamicTask;
-import com.genersoft.iot.vmp.gb28181.bean.InviteStreamType;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
@@ -18,6 +17,8 @@
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import gov.nist.javax.sip.message.SIPRequest;
+import gov.nist.javax.sip.stack.SIPDialog;
import org.ehcache.shadow.org.terracotta.offheapstore.storage.IntegerStorageEngine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -28,15 +29,18 @@
import javax.sip.Dialog;
import javax.sip.DialogState;
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 javax.sip.header.ToHeader;
+import java.text.ParseException;
import java.util.*;
/**
* SIP鍛戒护绫诲瀷锛� ACK璇锋眰
+ * @author lin
*/
@Component
public class AckRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
@@ -77,6 +81,9 @@
@Autowired
private ISIPCommanderForPlatform commanderForPlatform;
+ @Autowired
+ private AudioBroadcastManager audioBroadcastManager;
+
/**
* 澶勭悊 ACK璇锋眰
@@ -96,32 +103,58 @@
ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformGbId);
// 鍙栨秷璁剧疆鐨勮秴鏃朵换鍔�
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());
+// String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platformGbId, null, null, callIdHeader.getCallId());
String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
- logger.info("鏀跺埌ACK锛屽紑濮嬪悜涓婄骇鎺ㄦ祦 rtp/{}", sendRtpItem.getStreamId());
+ logger.info("[鏀跺埌ACK]锛屽紑濮嬩娇鐢▄}鍚戜笂绾ф帹娴� {}/{}->{}:{}({})", sendRtpItem.isTcp() ? "TCP" : "UDP",
+ sendRtpItem.getApp(), sendRtpItem.getStreamId(),
+ sendRtpItem.getIp() ,sendRtpItem.getPort(),
+ sendRtpItem.getSsrc());
Map<String, Object> param = new HashMap<>();
param.put("vhost","__defaultVhost__");
param.put("app",sendRtpItem.getApp());
param.put("stream",sendRtpItem.getStreamId());
param.put("ssrc", sendRtpItem.getSsrc());
- param.put("dst_url",sendRtpItem.getIp());
- param.put("dst_port", sendRtpItem.getPort());
- param.put("is_udp", is_Udp);
param.put("src_port", sendRtpItem.getLocalPort());
param.put("pt", sendRtpItem.getPt());
param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
- JSONObject jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
+ JSONObject jsonObject;
+ if (sendRtpItem.isTcpActive()) {
+ jsonObject = zlmrtpServerFactory.startSendRtpPassive(mediaInfo, param);
+ }else {
+ param.put("is_udp", is_Udp);
+ param.put("dst_url",sendRtpItem.getIp());
+ param.put("dst_port", sendRtpItem.getPort());
+ jsonObject = zlmrtpServerFactory.startSendRtpStream(mediaInfo, param);
+ }
+
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()) {
- // TODO 鍙兘鏄闊冲璁�
+ // 璇煶瀵硅
+ try {
+ cmder.streamByeCmd((SIPDialog) evt.getDialog(), (SIPRequest)evt.getRequest(), null);
+ } catch (SipException e) {
+ throw new RuntimeException(e);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
}else {
// 鍚戜笂绾у钩鍙�
commanderForPlatform.streamByeCmd(parentPlatform, callIdHeader.getCallId());
--
Gitblit v1.8.0