From 71fe60d885b09d53fcd4c58afcfccf18d24a94c2 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 11 四月 2024 15:34:56 +0800
Subject: [PATCH] 更新README
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java | 133 +++++++++++++++++++++++---------------------
1 files changed, 69 insertions(+), 64 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 189976d..10922f4 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
@@ -1,17 +1,17 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
-import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.conf.UserSetting;
+import com.genersoft.iot.vmp.conf.exception.ControllerException;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
-import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
-import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
-import com.genersoft.iot.vmp.service.IMediaServerService;
+import com.genersoft.iot.vmp.media.bean.MediaServer;
+import com.genersoft.iot.vmp.media.service.IMediaServerService;
+import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.service.IPlayService;
import com.genersoft.iot.vmp.service.bean.RequestPushStreamMsg;
import com.genersoft.iot.vmp.service.redisMsg.RedisGbPlayMsgListener;
@@ -29,9 +29,6 @@
import javax.sip.header.FromHeader;
import javax.sip.header.HeaderAddress;
import javax.sip.header.ToHeader;
-import java.text.ParseException;
-import java.util.HashMap;
-import java.util.Map;
/**
* SIP鍛戒护绫诲瀷锛� ACK璇锋眰
@@ -56,13 +53,13 @@
private IRedisCatchStorage redisCatchStorage;
@Autowired
+ private UserSetting userSetting;
+
+ @Autowired
private IVideoManagerStorage storager;
@Autowired
- private ZLMRTPServerFactory zlmrtpServerFactory;
-
- @Autowired
- private ZlmHttpHookSubscribe hookSubscribe;
+ private IDeviceService deviceService;
@Autowired
private IMediaServerService mediaServerService;
@@ -74,9 +71,6 @@
private RedisGbPlayMsgListener redisGbPlayMsgListener;
@Autowired
- private UserSetting userSetting;
-
- @Autowired
private IPlayService playService;
@@ -86,62 +80,73 @@
@Override
public void process(RequestEvent evt) {
CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
+ dynamicTask.stop(callIdHeader.getCallId());
+ String fromUserId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
+ String toUserId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
+ logger.info("[鏀跺埌ACK]锛� 鏉ヨ嚜->{}", fromUserId);
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, null, callIdHeader.getCallId());
+ if (sendRtpItem == null) {
+ logger.warn("[鏀跺埌ACK]锛氭湭鎵惧埌鏉ヨ嚜{}锛岀洰鏍囦负({})鐨勬帹娴佷俊鎭�",fromUserId, toUserId);
+ return;
+ }
+ // tcp涓诲姩鏃讹紝姝ゆ椂鏄骇鑱斾笅绾у钩鍙帮紝鍦ㄥ洖澶�200ok鏃讹紝鏈湴宸茬粡璇锋眰zlm寮�鍚洃鍚紝璺宠繃涓嬮潰姝ラ
+ if (sendRtpItem.isTcpActive()) {
+ logger.info("鏀跺埌ACK锛宺tp/{} TCP涓诲姩鏂瑰紡鍚庣画澶勭悊", sendRtpItem.getStream());
+ return;
+ }
+ MediaServer mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
+ logger.info("鏀跺埌ACK锛宺tp/{}寮�濮嬪悜涓婄骇鎺ㄦ祦, 鐩爣={}:{}锛孲SRC={}, 鍗忚:{}",
+ sendRtpItem.getStream(),
+ sendRtpItem.getIp(),
+ sendRtpItem.getPort(),
+ sendRtpItem.getSsrc(),
+ sendRtpItem.isTcp()?(sendRtpItem.isTcpActive()?"TCP涓诲姩":"TCP琚姩"):"UDP"
+ );
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(fromUserId);
- String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
- logger.info("[鏀跺埌ACK]锛� platformGbId->{}", platformGbId);
- if (userSetting.getPushStreamAfterAck()) {
- 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(null, null, null, callIdHeader.getCallId());
- if (sendRtpItem == null) {
- logger.warn("[鏀跺埌ACK]锛氭湭鎵惧埌閫氶亾({})鐨勬帹娴佷俊鎭�", channelId);
+ if (parentPlatform != null) {
+ if (!userSetting.getServerId().equals(sendRtpItem.getServerId())) {
+ RequestPushStreamMsg requestPushStreamMsg = RequestPushStreamMsg.getInstance(sendRtpItem);
+ redisGbPlayMsgListener.sendMsgForStartSendRtpStream(sendRtpItem.getServerId(), requestPushStreamMsg, () -> {
+ playService.startSendRtpStreamFailHand(sendRtpItem, parentPlatform, callIdHeader);
+ });
+ } else {
+ try {
+ if (sendRtpItem.isTcpActive()) {
+ mediaServerService.startSendRtpPassive(mediaInfo, parentPlatform, sendRtpItem, null);
+ } else {
+ mediaServerService.startSendRtp(mediaInfo, parentPlatform, sendRtpItem);
+ }
+ }catch (ControllerException e) {
+ logger.error("RTP鎺ㄦ祦澶辫触: {}", e.getMessage());
+ playService.startSendRtpStreamFailHand(sendRtpItem, parentPlatform, callIdHeader);
+ }
+ }
+ }else {
+ Device device = deviceService.getDevice(fromUserId);
+ if (device == null) {
+ logger.warn("[鏀跺埌ACK]锛氭潵鑷獅}锛岀洰鏍囦负({})鐨勬帹娴佷俊鎭负鎵惧埌娴佷綋鏈嶅姟[{}]淇℃伅",fromUserId, toUserId, sendRtpItem.getMediaServerId());
return;
}
- String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
- MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
- logger.info("鏀跺埌ACK锛宺tp/{}寮�濮嬪悜涓婄骇鎺ㄦ祦, 鐩爣={}:{}锛孲SRC={}, RTCP={}", sendRtpItem.getStreamId(),
- sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc(), sendRtpItem.isRtcp());
+ // 璁剧疆涓烘敹鍒癆CK鍚庡彂閫佽闊崇殑璁惧宸茬粡鍦ㄥ彂閫�200OK寮�濮嬪彂娴佷簡
+ if (!device.isBroadcastPushAfterAck()) {
+ return;
+ }
if (mediaInfo == null) {
- RequestPushStreamMsg requestPushStreamMsg = RequestPushStreamMsg.getInstance(
- sendRtpItem.getMediaServerId(), sendRtpItem.getApp(), sendRtpItem.getStreamId(),
- sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc(), sendRtpItem.isTcp(),
- sendRtpItem.getLocalPort(), sendRtpItem.getPt(), sendRtpItem.isUsePs(), sendRtpItem.isOnlyAudio());
- redisGbPlayMsgListener.sendMsgForStartSendRtpStream(sendRtpItem.getServerId(), requestPushStreamMsg, json -> {
- startSendRtpStreamHand(evt, sendRtpItem, parentPlatform, json, callIdHeader);
- });
- }else {
- JSONObject startSendRtpStreamResult = zlmrtpServerFactory.startSendRtp(mediaInfo, sendRtpItem);
- if (startSendRtpStreamResult != null) {
- startSendRtpStreamHand(evt, sendRtpItem, parentPlatform, startSendRtpStreamResult, callIdHeader);
+ logger.warn("[鏀跺埌ACK]锛氭潵鑷獅}锛岀洰鏍囦负({})鐨勬帹娴佷俊鎭负鎵惧埌娴佷綋鏈嶅姟[{}]淇℃伅",fromUserId, toUserId, sendRtpItem.getMediaServerId());
+ return;
+ }
+ try {
+ if (sendRtpItem.isTcpActive()) {
+ mediaServerService.startSendRtpPassive(mediaInfo, null, sendRtpItem, null);
+ } else {
+ mediaServerService.startSendRtp(mediaInfo, null, sendRtpItem);
}
+ }catch (ControllerException e) {
+ logger.error("RTP鎺ㄦ祦澶辫触: {}", e.getMessage());
+ playService.startSendRtpStreamFailHand(sendRtpItem, null, callIdHeader);
}
}
- }
- private void startSendRtpStreamHand(RequestEvent evt, SendRtpItem sendRtpItem, ParentPlatform parentPlatform,
- JSONObject jsonObject, Map<String, Object> param, CallIdHeader callIdHeader) {
- if (jsonObject == null) {
- logger.error("RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟");
- } else if (jsonObject.getInteger("code") == 0) {
- logger.info("璋冪敤ZLM鎺ㄦ祦鎺ュ彛, 缁撴灉锛� {}", jsonObject);
- 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"), JSON.toJSONString(param));
- if (sendRtpItem.isOnlyAudio()) {
- Device device = deviceService.getDevice(sendRtpItem.getDeviceId());
- AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
- if (audioBroadcastCatch != null) {
- try {
- cmder.streamByeCmd(device, sendRtpItem.getChannelId(), audioBroadcastCatch.getSipTransactionInfo(), null);
- } catch (SipException | ParseException | InvalidArgumentException |
- SsrcTransactionNotFoundException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍋滄璇煶瀵硅: {}", e.getMessage());
- }
- }
- }
- }
-
}
}
--
Gitblit v1.8.0