|  | @@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.conf.DynamicTask;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.conf.SipConfig;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.conf.UserSetting;
 | 
	
		
			
				|  |  | +import com.genersoft.iot.vmp.conf.exception.ControllerException;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.bean.*;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
 | 
	
	
		
			
				|  | @@ -24,7 +25,6 @@ import com.genersoft.iot.vmp.media.event.hook.HookSubscribe;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.media.event.hook.HookType;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.media.service.IMediaServerService;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager;
 | 
	
		
			
				|  |  | -import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.service.IInviteStreamService;
 | 
	
	
		
			
				|  | @@ -61,7 +61,6 @@ import javax.sip.header.CallIdHeader;
 | 
	
		
			
				|  |  |  import javax.sip.message.Response;
 | 
	
		
			
				|  |  |  import java.text.ParseException;
 | 
	
		
			
				|  |  |  import java.time.Instant;
 | 
	
		
			
				|  |  | -import java.util.HashMap;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  |  import java.util.Random;
 | 
	
		
			
				|  |  |  import java.util.Vector;
 | 
	
	
		
			
				|  | @@ -113,9 +112,6 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private AudioBroadcastManager audioBroadcastManager;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  | -    private ZLMServerFactory zlmServerFactory;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private IMediaServerService mediaServerService;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -382,8 +378,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |                      } else {
 | 
	
		
			
				|  |  |                          streamTypeStr = "UDP";
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    logger.info("[上级Invite] {}, 平台:{}, 通道:{}, 收流地址:{}:{},收流方式:{}, ssrc:{}", sessionName, username, channelId, addressStr, port, streamTypeStr, ssrc);
 | 
	
		
			
				|  |  | -                    SendRtpItem sendRtpItem = zlmServerFactory.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
 | 
	
		
			
				|  |  | +                    logger.info("[上级Invite] {}, 平台:{}, 通道:{}, 收流地址:{}:{},收流方式:{}, ssrc:{}",
 | 
	
		
			
				|  |  | +                            sessionName, username, channelId, addressStr, port, streamTypeStr, ssrc);
 | 
	
		
			
				|  |  | +                    SendRtpItem sendRtpItem = mediaServerService.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
 | 
	
		
			
				|  |  |                              device.getDeviceId(), channelId, mediaTransmissionTCP, platform.isRtcp());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if (tcpActive != null) {
 | 
	
	
		
			
				|  | @@ -462,30 +459,10 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |                              responseSdpAck(request, content.toString(), platform);
 | 
	
		
			
				|  |  |                              // tcp主动模式,回复sdp后开启监听
 | 
	
		
			
				|  |  |                              if (sendRtpItem.isTcpActive()) {
 | 
	
		
			
				|  |  | -                                MediaServer mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
 | 
	
		
			
				|  |  | -                                Map<String, Object> param = new HashMap<>(12);
 | 
	
		
			
				|  |  | -                                param.put("vhost","__defaultVhost__");
 | 
	
		
			
				|  |  | -                                param.put("app",sendRtpItem.getApp());
 | 
	
		
			
				|  |  | -                                param.put("stream",sendRtpItem.getStream());
 | 
	
		
			
				|  |  | -                                param.put("ssrc", sendRtpItem.getSsrc());
 | 
	
		
			
				|  |  | -                                if (!sendRtpItem.isTcpActive()) {
 | 
	
		
			
				|  |  | -                                    param.put("dst_url",sendRtpItem.getIp());
 | 
	
		
			
				|  |  | -                                    param.put("dst_port", sendRtpItem.getPort());
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                                String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
 | 
	
		
			
				|  |  | -                                param.put("is_udp", is_Udp);
 | 
	
		
			
				|  |  | -                                param.put("src_port", localPort);
 | 
	
		
			
				|  |  | -                                param.put("pt", sendRtpItem.getPt());
 | 
	
		
			
				|  |  | -                                param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
 | 
	
		
			
				|  |  | -                                param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
 | 
	
		
			
				|  |  | -                                if (!sendRtpItem.isTcp()) {
 | 
	
		
			
				|  |  | -                                    // 开启rtcp保活
 | 
	
		
			
				|  |  | -                                    param.put("udp_rtcp_timeout", sendRtpItem.isRtcp()? "1":"0");
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                                JSONObject startSendRtpStreamResult = zlmServerFactory.startSendRtpPassive(mediaInfo, param);
 | 
	
		
			
				|  |  | -                                if (startSendRtpStreamResult != null) {
 | 
	
		
			
				|  |  | -                                    startSendRtpStreamHand(evt, sendRtpItem, null, startSendRtpStreamResult, param, callIdHeader);
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | +                                MediaServer mediaServer = mediaServerService.getOne(sendRtpItem.getMediaServerId());
 | 
	
		
			
				|  |  | +                                try {
 | 
	
		
			
				|  |  | +                                    mediaServerService.startSendRtpPassive(mediaServer, platform, sendRtpItem, 5);
 | 
	
		
			
				|  |  | +                                }catch (ControllerException e) {}
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                          } catch (SipException | InvalidArgumentException | ParseException e) {
 | 
	
		
			
				|  |  |                              logger.error("[命令发送失败] 国标级联 回复SdpAck", e);
 | 
	
	
		
			
				|  | @@ -638,13 +615,14 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |       * 安排推流
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      private void pushProxyStream(RequestEvent evt, SIPRequest request, GbStream gbStream, ParentPlatform platform,
 | 
	
		
			
				|  |  | -                            CallIdHeader callIdHeader, MediaServer mediaServerItem,
 | 
	
		
			
				|  |  | +                            CallIdHeader callIdHeader, MediaServer mediaServer,
 | 
	
		
			
				|  |  |                              int port, Boolean tcpActive, boolean mediaTransmissionTCP,
 | 
	
		
			
				|  |  |                              String channelId, String addressStr, String ssrc, String requesterId) {
 | 
	
		
			
				|  |  | -            Boolean streamReady = mediaServerService.isStreamReady(mediaServerItem, gbStream.getApp(), gbStream.getStream());
 | 
	
		
			
				|  |  | +            Boolean streamReady = mediaServerService.isStreamReady(mediaServer, gbStream.getApp(), gbStream.getStream());
 | 
	
		
			
				|  |  |              if (streamReady != null && streamReady) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  // 自平台内容
 | 
	
		
			
				|  |  | -                SendRtpItem sendRtpItem = zlmServerFactory.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
 | 
	
		
			
				|  |  | +                SendRtpItem sendRtpItem = mediaServerService.createSendRtpItem(mediaServer, addressStr, port, ssrc, requesterId,
 | 
	
		
			
				|  |  |                          gbStream.getApp(), gbStream.getStream(), channelId, mediaTransmissionTCP, platform.isRtcp());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (sendRtpItem == null) {
 | 
	
	
		
			
				|  | @@ -665,7 +643,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |              sendRtpItem.setCallId(callIdHeader.getCallId());
 | 
	
		
			
				|  |  |              sendRtpItem.setFromTag(request.getFromTag());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            SIPResponse response = sendStreamAck(mediaServerItem, request, sendRtpItem, platform, evt);
 | 
	
		
			
				|  |  | +            SIPResponse response = sendStreamAck(mediaServer, request, sendRtpItem, platform, evt);
 | 
	
		
			
				|  |  |              if (response != null) {
 | 
	
		
			
				|  |  |                  sendRtpItem.setToTag(response.getToTag());
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -684,7 +662,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |              Boolean streamReady = mediaServerService.isStreamReady(mediaServerItem, gbStream.getApp(), gbStream.getStream());
 | 
	
		
			
				|  |  |              if (streamReady != null && streamReady) {
 | 
	
		
			
				|  |  |                  // 自平台内容
 | 
	
		
			
				|  |  | -                SendRtpItem sendRtpItem = zlmServerFactory.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
 | 
	
		
			
				|  |  | +                SendRtpItem sendRtpItem = mediaServerService.createSendRtpItem(mediaServerItem, addressStr, port, ssrc, requesterId,
 | 
	
		
			
				|  |  |                          gbStream.getApp(), gbStream.getStream(), channelId, mediaTransmissionTCP, platform.isRtcp());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if (sendRtpItem == null) {
 | 
	
	
		
			
				|  | @@ -794,7 +772,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |                  dynamicTask.stop(callIdHeader.getCallId());
 | 
	
		
			
				|  |  |                  redisPushStreamResponseListener.removeEvent(gbStream.getApp(), gbStream.getStream());
 | 
	
		
			
				|  |  |                  if (serverId.equals(userSetting.getServerId())) {
 | 
	
		
			
				|  |  | -                    SendRtpItem sendRtpItem = zlmServerFactory.createSendRtpItem(mediaServerItem, addressStr, finalPort, ssrc, requesterId,
 | 
	
		
			
				|  |  | +                    SendRtpItem sendRtpItem = mediaServerService.createSendRtpItem(mediaServerItem, addressStr, finalPort, ssrc, requesterId,
 | 
	
		
			
				|  |  |                              app, stream, channelId, mediaTransmissionTCP, platform.isRtcp());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      if (sendRtpItem == null) {
 | 
	
	
		
			
				|  | @@ -1074,7 +1052,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
 | 
	
		
			
				|  |  |                          mediaTransmissionTCP ? (tcpActive ? "TCP主动" : "TCP被动") : "UDP", sdp.getSessionName().getValue());
 | 
	
		
			
				|  |  |                  CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                SendRtpItem sendRtpItem = zlmServerFactory.createSendRtpItem(mediaServerItem, addressStr, port, gb28181Sdp.getSsrc(), requesterId,
 | 
	
		
			
				|  |  | +                SendRtpItem sendRtpItem = mediaServerService.createSendRtpItem(mediaServerItem, addressStr, port, gb28181Sdp.getSsrc(), requesterId,
 | 
	
		
			
				|  |  |                          device.getDeviceId(), broadcastCatch.getChannelId(),
 | 
	
		
			
				|  |  |                          mediaTransmissionTCP, false);
 | 
	
		
			
				|  |  |  
 |