|
|
@@ -1,113 +0,0 @@
|
|
|
-package org.jetlinks.community.media.sip;
|
|
|
-
|
|
|
-import gov.nist.javax.sip.SipProviderImpl;
|
|
|
-import lombok.AllArgsConstructor;
|
|
|
-import lombok.SneakyThrows;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.hswebframework.web.exception.BusinessException;
|
|
|
-import org.jetlinks.community.media.bean.EventResult;
|
|
|
-import org.jetlinks.community.media.bean.SSRCInfo;
|
|
|
-import org.jetlinks.community.media.entity.MediaDevice;
|
|
|
-import org.jetlinks.community.media.bean.SipServerConfig;
|
|
|
-import org.jetlinks.community.media.enums.StreamMode;
|
|
|
-import org.jetlinks.community.media.sip.request.impl.InviteRequestProcessor;
|
|
|
-import org.jetlinks.community.media.sip.request.impl.RegisterRequestProcessor;
|
|
|
-import org.jetlinks.community.media.sip.request.message.MessageRequestProcessor;
|
|
|
-import org.jetlinks.community.media.sip.request.message.notify.KeepaliveNotifyMessageHandler;
|
|
|
-import org.jetlinks.community.media.sip.processor.SipProcessorObserver;
|
|
|
-import org.jetlinks.community.media.transmit.SIPRequestHeaderProvider;
|
|
|
-import org.jetlinks.community.media.transmit.cmd.SipCommander;
|
|
|
-import org.jetlinks.community.media.zlm.entity.MediaServerItem;
|
|
|
-import org.springframework.beans.factory.config.BeanPostProcessor;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
-import reactor.core.publisher.Flux;
|
|
|
-import reactor.core.publisher.Mono;
|
|
|
-import javax.sip.*;
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-/**
|
|
|
- * @author lifang
|
|
|
- * @version 1.0.0
|
|
|
- * @ClassName SipServerHelper.java
|
|
|
- * @Description TODO
|
|
|
- * @createTime 2022年01月15日 14:05:00
|
|
|
- */
|
|
|
-@Component
|
|
|
-@Slf4j
|
|
|
-@AllArgsConstructor
|
|
|
-public class SipServerHelper implements BeanPostProcessor {
|
|
|
-
|
|
|
-
|
|
|
- private final SipProcessorObserver sipProcessorObserver;
|
|
|
-
|
|
|
-
|
|
|
- public Mono<SipProcessorObserver> createSip(SipServerConfig sipConfig){
|
|
|
- sipConfig.validateCreate();
|
|
|
- try {
|
|
|
- SipContext.updateSipServerConfig(sipConfig);
|
|
|
- } catch (TransportNotSupportedException e) {
|
|
|
- return Mono.error( new BusinessException("不支持该协议[{"+sipConfig.getTransport()+"}],请从tcp、udp中选择"));
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- return Mono.error( new BusinessException(String.format("无法使用 [ {%s}:{%s} ]作为SIP[ UDP ]服务,可排查: 1. sip.monitor-ip 是否为本机网卡IP; 2. sip.port 是否已被占用"
|
|
|
- , sipConfig.getHost(), sipConfig.getPort())));
|
|
|
-
|
|
|
- }
|
|
|
- return Mono.just(sipProcessorObserver)
|
|
|
- .doOnNext(observer->{
|
|
|
- Map<String,SipProvider> sipProviders = SipContext.getSipProviders();
|
|
|
- if(sipProviders==null){
|
|
|
- log.error("sip启动失败");
|
|
|
- throw new BusinessException("sip启动失败");
|
|
|
- }
|
|
|
- for (SipProvider provider : sipProviders.values()) {
|
|
|
- SipListener sipListener = ((SipProviderImpl)provider).getSipListener();
|
|
|
- if(sipListener!=null){
|
|
|
- provider.removeSipListener(sipListener);
|
|
|
- }
|
|
|
- try {
|
|
|
- provider.addSipListener(sipProcessorObserver);
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("sipProvider 添加 sipListener 失败");
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- @SneakyThrows
|
|
|
- public static void main(String[] args) {
|
|
|
-// SipProcessorObserver sipProcessorObserver = new SipProcessorObserver();
|
|
|
-// RegisterRequestProcessor registerRequestProcessor = new RegisterRequestProcessor(null);
|
|
|
-// registerRequestProcessor.observer=sipProcessorObserver;
|
|
|
-// registerRequestProcessor.init();
|
|
|
-// InviteRequestProcessor inviteRequestProcessor = new InviteRequestProcessor(null,null);
|
|
|
-// inviteRequestProcessor.observer=sipProcessorObserver;
|
|
|
-// inviteRequestProcessor.init();
|
|
|
-// MessageRequestProcessor messageRequestProcessor = new MessageRequestProcessor();
|
|
|
-// messageRequestProcessor.observer=sipProcessorObserver;
|
|
|
-// messageRequestProcessor.init();
|
|
|
-// KeepaliveNotifyMessageHandler keepaliveNotifyMessageHandler = new KeepaliveNotifyMessageHandler();
|
|
|
-// keepaliveNotifyMessageHandler.observer=sipProcessorObserver;
|
|
|
-// keepaliveNotifyMessageHandler.init();
|
|
|
-// keepaliveNotifyMessageHandler.messageRequestProcessor=messageRequestProcessor;
|
|
|
-// keepaliveNotifyMessageHandler.start();
|
|
|
-// new SipServerHelper(sipProcessorObserver).
|
|
|
-// createSip( SipServerConfig.of("1","0.0.0.0", 7000,"udp","340200000","utf-8","12345678",10L,""))
|
|
|
-// .subscribe();
|
|
|
-// SipCommander sipCommander = new SipCommander(new SIPRequestHeaderProvider(null));
|
|
|
-// SSRCInfo ssrcInfo = SSRCInfo.of(5003,null,null);
|
|
|
-// MediaDevice mediaDevice = new MediaDevice();
|
|
|
-// mediaDevice.setStreamMode(StreamMode.TCP_ACTIVE.name());
|
|
|
-// mediaDevice.setId("34020000001320000003");
|
|
|
-// mediaDevice.setHostAddress("192.168.104.244");
|
|
|
-// mediaDevice.setPort(5063);
|
|
|
-// mediaDevice.setTransport("udp");
|
|
|
-// MediaServerItem mediaServerItem = new MediaServerItem();
|
|
|
-// mediaServerItem.setSdpIp("192.168.104.244");
|
|
|
-// Flux<EventResult> eventResultFlux = sipCommander.playStreamCmd(mediaServerItem, ssrcInfo,mediaDevice, "34020000001320000003");
|
|
|
-// eventResultFlux
|
|
|
-// .doOnNext(s->{
|
|
|
-// System.out.println(s);
|
|
|
-// })
|
|
|
-// .subscribe();
|
|
|
- }
|
|
|
-}
|