更新 gb28181-docking-platform 依赖版本

This commit is contained in:
shikong 2024-01-11 11:33:58 +08:00
parent e36befe7ef
commit e6819b2a15
13 changed files with 135 additions and 27 deletions

View File

@ -2,7 +2,9 @@ package cn.skcks.docking.gb28181.wvp.api.gb28181;
import cn.skcks.docking.gb28181.annotation.web.JsonMapping; import cn.skcks.docking.gb28181.annotation.web.JsonMapping;
import cn.skcks.docking.gb28181.annotation.web.methods.GetJson; import cn.skcks.docking.gb28181.annotation.web.methods.GetJson;
import cn.skcks.docking.gb28181.annotation.web.methods.PostJson;
import cn.skcks.docking.gb28181.common.json.JsonResponse; import cn.skcks.docking.gb28181.common.json.JsonResponse;
import cn.skcks.docking.gb28181.core.sip.message.processor.message.types.recordinfo.query.dto.RecordInfoRequestDTO;
import cn.skcks.docking.gb28181.wvp.config.SwaggerConfig; import cn.skcks.docking.gb28181.wvp.config.SwaggerConfig;
import cn.skcks.docking.gb28181.wvp.service.catalog.CatalogService; import cn.skcks.docking.gb28181.wvp.service.catalog.CatalogService;
import cn.skcks.docking.gb28181.wvp.service.device.control.DeviceControlService; import cn.skcks.docking.gb28181.wvp.service.device.control.DeviceControlService;
@ -49,4 +51,9 @@ public class Gb28181Controller {
deviceControlService.sendRecordControl(deviceCode, cmd); deviceControlService.sendRecordControl(deviceCode, cmd);
return JsonResponse.success(null); return JsonResponse.success(null);
} }
@PostJson("/recordInfo")
public JsonResponse<Void> recordInfo(RecordInfoRequestDTO dto){
return JsonResponse.success(null);
}
} }

View File

@ -1,7 +1,8 @@
package cn.skcks.docking.gb28181.wvp.config; package cn.skcks.docking.gb28181.wvp.config;
import cn.skcks.docking.gb28181.config.sip.SipConfig; import cn.skcks.docking.gb28181.config.sip.SipConfig;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.StreamMode; import cn.skcks.docking.gb28181.sdp.media.MediaStreamMode;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -30,7 +31,7 @@ public class ProxySipConfig {
private String transport = ListeningPoint.UDP; private String transport = ListeningPoint.UDP;
private StreamMode streamMode = StreamMode.TCP_PASSIVE; private MediaStreamMode streamMode = MediaStreamMode.TCP_PASSIVE;
/** /**
* 某些特殊情况下 使用 视频回放点播 代替 下载 * 某些特殊情况下 使用 视频回放点播 代替 下载

View File

@ -12,9 +12,6 @@ import cn.skcks.docking.gb28181.common.json.JsonUtils;
import cn.skcks.docking.gb28181.common.redis.RedisUtil; import cn.skcks.docking.gb28181.common.redis.RedisUtil;
import cn.skcks.docking.gb28181.core.sip.gb28181.cache.CacheUtil; import cn.skcks.docking.gb28181.core.sip.gb28181.cache.CacheUtil;
import cn.skcks.docking.gb28181.core.sip.gb28181.constant.GB28181Constant; import cn.skcks.docking.gb28181.core.sip.gb28181.constant.GB28181Constant;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.GB28181Description;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.MediaSdpHelper;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.StreamMode;
import cn.skcks.docking.gb28181.core.sip.message.processor.MessageProcessor; import cn.skcks.docking.gb28181.core.sip.message.processor.MessageProcessor;
import cn.skcks.docking.gb28181.core.sip.message.subscribe.GenericSubscribe; import cn.skcks.docking.gb28181.core.sip.message.subscribe.GenericSubscribe;
import cn.skcks.docking.gb28181.core.sip.utils.SipUtil; import cn.skcks.docking.gb28181.core.sip.utils.SipUtil;
@ -25,6 +22,9 @@ import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServer;
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServerResp; import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServerResp;
import cn.skcks.docking.gb28181.media.dto.status.ResponseStatus; import cn.skcks.docking.gb28181.media.dto.status.ResponseStatus;
import cn.skcks.docking.gb28181.media.proxy.ZlmMediaService; import cn.skcks.docking.gb28181.media.proxy.ZlmMediaService;
import cn.skcks.docking.gb28181.sdp.GB28181Description;
import cn.skcks.docking.gb28181.sdp.GB28181SDPBuilder;
import cn.skcks.docking.gb28181.sdp.media.MediaStreamMode;
import cn.skcks.docking.gb28181.service.ssrc.SsrcService; import cn.skcks.docking.gb28181.service.ssrc.SsrcService;
import cn.skcks.docking.gb28181.wvp.config.ProxySipConfig; import cn.skcks.docking.gb28181.wvp.config.ProxySipConfig;
import cn.skcks.docking.gb28181.wvp.config.WvpProxyConfig; import cn.skcks.docking.gb28181.wvp.config.WvpProxyConfig;
@ -244,7 +244,7 @@ public class Gb28181DownloadService {
return result; return result;
} }
String existUrl = RedisUtil.StringOps.get(CacheUtil.getKey(MediaSdpHelper.Action.PLAY.getAction(), deviceCode)); String existUrl = RedisUtil.StringOps.get(CacheUtil.getKey(GB28181SDPBuilder.Action.PLAY.getAction(), deviceCode));
if(Optional.ofNullable(existUrl).isPresent()){ if(Optional.ofNullable(existUrl).isPresent()){
result.setResult(JsonResponse.success(existUrl)); result.setResult(JsonResponse.success(existUrl));
return result; return result;
@ -259,7 +259,7 @@ public class Gb28181DownloadService {
log.info("获取媒体信息 {}", videoInfo); log.info("获取媒体信息 {}", videoInfo);
// 原始链接转换为前端可用的链接 // 原始链接转换为前端可用的链接
RedisUtil.StringOps.set(CacheUtil.getKey(MediaSdpHelper.Action.PLAY.getAction(), videoInfo.getCallId()), JsonUtils.toJson(videoInfo)); RedisUtil.StringOps.set(CacheUtil.getKey(GB28181SDPBuilder.Action.PLAY.getAction(), videoInfo.getCallId()), JsonUtils.toJson(videoInfo));
String url = StringUtils.isNotBlank(proxySipConfig.getProxyMediaUrl()) ? String url = StringUtils.isNotBlank(proxySipConfig.getProxyMediaUrl()) ?
StringUtils.replace(videoInfo.getUrl(), zlmMediaConfig.getUrl(), proxySipConfig.getProxyMediaUrl()): StringUtils.replace(videoInfo.getUrl(), zlmMediaConfig.getUrl(), proxySipConfig.getProxyMediaUrl()):
videoInfo.getUrl(); videoInfo.getUrl();
@ -359,9 +359,9 @@ public class Gb28181DownloadService {
WvpProxyDevice device = deviceByGbDeviceIdAndChannel.get(); WvpProxyDevice device = deviceByGbDeviceIdAndChannel.get();
WvpProxyDocking docking = deviceByGbDeviceId.get(); WvpProxyDocking docking = deviceByGbDeviceId.get();
String streamId = MediaSdpHelper.getStreamId(gbDeviceId, channel, IdUtil.getSnowflakeNextIdStr()); String streamId = GB28181SDPBuilder.getStreamId(gbDeviceId, channel, IdUtil.getSnowflakeNextIdStr());
int isTcp = proxySipConfig.getStreamMode() == StreamMode.UDP ? 0 : 1; int isTcp = proxySipConfig.getStreamMode() == MediaStreamMode.UDP ? 0 : 1;
StreamMode streamMode = proxySipConfig.getStreamMode(); MediaStreamMode streamMode = proxySipConfig.getStreamMode();
String ip = zlmMediaConfig.getIp(); String ip = zlmMediaConfig.getIp();
int port = openRtpServer(streamId, isTcp); int port = openRtpServer(streamId, isTcp);
if(port <= 0){ if(port <= 0){
@ -370,7 +370,7 @@ public class Gb28181DownloadService {
return result; return result;
} }
String ssrc = ssrcService.getPlaySsrc(); String ssrc = ssrcService.getPlaySsrc();
GB28181Description gb28181Description = MediaSdpHelper.play(gbDeviceId, channel, Connection.IP4, ip, port, ssrc, streamMode); GB28181Description gb28181Description = GB28181SDPBuilder.Receiver.play(gbDeviceId, channel, Connection.IP4, ip, port, ssrc, streamMode);
sender.sendRequest(inviteRequest(docking, device, gb28181Description, ssrc, streamId, result)); sender.sendRequest(inviteRequest(docking, device, gb28181Description, ssrc, streamId, result));
return result; return result;
} }
@ -440,9 +440,9 @@ public class Gb28181DownloadService {
ZoneId zoneId = ZoneId.of(GB28181Constant.TIME_ZONE); ZoneId zoneId = ZoneId.of(GB28181Constant.TIME_ZONE);
long start = LocalDateTimeUtil.of(startTime.toInstant(), zoneId).atZone(zoneId).toEpochSecond(); long start = LocalDateTimeUtil.of(startTime.toInstant(), zoneId).atZone(zoneId).toEpochSecond();
long end = LocalDateTimeUtil.of(endTime.toInstant(), zoneId).atZone(zoneId).toEpochSecond(); long end = LocalDateTimeUtil.of(endTime.toInstant(), zoneId).atZone(zoneId).toEpochSecond();
String streamId = MediaSdpHelper.getStreamId(gbDeviceId, channel, String.valueOf(start), String.valueOf(end), IdUtil.getSnowflakeNextIdStr()); String streamId = GB28181SDPBuilder.getStreamId(gbDeviceId, channel, String.valueOf(start), String.valueOf(end), IdUtil.getSnowflakeNextIdStr());
int isTcp = proxySipConfig.getStreamMode() == StreamMode.UDP ? 0 : 1; int isTcp = proxySipConfig.getStreamMode() == MediaStreamMode.UDP ? 0 : 1;
StreamMode streamMode = proxySipConfig.getStreamMode(); MediaStreamMode streamMode = proxySipConfig.getStreamMode();
String ip = zlmMediaConfig.getIp(); String ip = zlmMediaConfig.getIp();
int port = openRtpServer(streamId, isTcp); int port = openRtpServer(streamId, isTcp);
if(port <= 0){ if(port <= 0){
@ -455,15 +455,15 @@ public class Gb28181DownloadService {
timeField.setStartTime(start); timeField.setStartTime(start);
timeField.setStopTime(end); timeField.setStopTime(end);
TimeDescription timeDescription = SdpFactory.getInstance().createTimeDescription(timeField); TimeDescription timeDescription = SdpFactory.getInstance().createTimeDescription(timeField);
MediaSdpHelper.Action action = MediaSdpHelper.Action.DOWNLOAD; GB28181SDPBuilder.Action action = GB28181SDPBuilder.Action.DOWNLOAD;
if(proxySipConfig.isUsePlaybackToDownload()){ if(proxySipConfig.isUsePlaybackToDownload()){
action = MediaSdpHelper.Action.PLAY_BACK; action = GB28181SDPBuilder.Action.PLAY_BACK;
} }
GB28181Description gb28181Description = MediaSdpHelper.build(action, gbDeviceId, channel, Connection.IP4, ip, port, ssrc, streamMode, timeDescription); GB28181Description gb28181Description = GB28181SDPBuilder.Receiver.build(action, gbDeviceId, channel, Connection.IP4, ip, port, ssrc, streamMode, timeDescription);
gb28181Description.setSessionName(SdpFactory.getInstance().createSessionName(action.getAction())); gb28181Description.setSessionName(SdpFactory.getInstance().createSessionName(action.getAction()));
gb28181Description.setTimeDescriptions(new Vector<>(){{add(timeDescription);}}); gb28181Description.setTimeDescriptions(new Vector<>(){{add(timeDescription);}});
MediaDescriptionImpl media = (MediaDescriptionImpl) gb28181Description.getMediaDescriptions(true).get(0); MediaDescriptionImpl media = (MediaDescriptionImpl) gb28181Description.getMediaDescriptions(true).get(0);
if(proxySipConfig.getStreamMode() != StreamMode.UDP){ if(proxySipConfig.getStreamMode() != MediaStreamMode.UDP){
media.getMedia().setProtocol("RTP/AVP/TCP"); media.getMedia().setProtocol("RTP/AVP/TCP");
} }
if(!proxySipConfig.isUsePlaybackToDownload()){ if(!proxySipConfig.isUsePlaybackToDownload()){
@ -477,7 +477,7 @@ public class Gb28181DownloadService {
} }
@SneakyThrows @SneakyThrows
public SipSender.SendRequest inviteRequest(WvpProxyDocking docking, WvpProxyDevice device, GB28181Description description, MediaSdpHelper.Action action, String ssrc, String streamId, CompletableFuture<VideoInfo> result, long time) { public SipSender.SendRequest inviteRequest(WvpProxyDocking docking, WvpProxyDevice device, GB28181Description description, GB28181SDPBuilder.Action action, String ssrc, String streamId, CompletableFuture<VideoInfo> result, long time) {
String cacheKey = CacheUtil.getKey(docking.getGbDeviceId(), device.getGbDeviceChannelId()); String cacheKey = CacheUtil.getKey(docking.getGbDeviceId(), device.getGbDeviceChannelId());
String existCallId = RedisUtil.StringOps.get(cacheKey); String existCallId = RedisUtil.StringOps.get(cacheKey);
@ -581,7 +581,7 @@ public class Gb28181DownloadService {
String ip = request.getLocalAddress().getHostAddress(); String ip = request.getLocalAddress().getHostAddress();
if(time <= 0) { if(time <= 0) {
String callId = request.getCallId().getCallId(); String callId = request.getCallId().getCallId();
String infoKey = CacheUtil.getKey(MediaSdpHelper.Action.PLAY.getAction(), callId); String infoKey = CacheUtil.getKey(GB28181SDPBuilder.Action.PLAY.getAction(), callId);
VideoInfo parse = JsonUtils.parse(RedisUtil.StringOps.get(infoKey), VideoInfo.class); VideoInfo parse = JsonUtils.parse(RedisUtil.StringOps.get(infoKey), VideoInfo.class);
Optional.ofNullable(parse).ifPresent((info)->{ Optional.ofNullable(parse).ifPresent((info)->{
if(info.getCallId().equalsIgnoreCase(callId)){ if(info.getCallId().equalsIgnoreCase(callId)){

View File

@ -3,10 +3,11 @@ package cn.skcks.docking.gb28181.wvp.service.gb28181;
import cn.skcks.docking.gb28181.common.json.JsonUtils; import cn.skcks.docking.gb28181.common.json.JsonUtils;
import cn.skcks.docking.gb28181.common.redis.RedisUtil; import cn.skcks.docking.gb28181.common.redis.RedisUtil;
import cn.skcks.docking.gb28181.core.sip.gb28181.cache.CacheUtil; import cn.skcks.docking.gb28181.core.sip.gb28181.cache.CacheUtil;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.MediaSdpHelper;
import cn.skcks.docking.gb28181.core.sip.utils.SipUtil; import cn.skcks.docking.gb28181.core.sip.utils.SipUtil;
import cn.skcks.docking.gb28181.media.dto.rtp.CloseRtpServer; import cn.skcks.docking.gb28181.media.dto.rtp.CloseRtpServer;
import cn.skcks.docking.gb28181.media.proxy.ZlmMediaService; import cn.skcks.docking.gb28181.media.proxy.ZlmMediaService;
import cn.skcks.docking.gb28181.sdp.GB28181SDPBuilder;
import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDevice; import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDevice;
import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDocking; import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDocking;
import cn.skcks.docking.gb28181.wvp.service.device.DeviceService; import cn.skcks.docking.gb28181.wvp.service.device.DeviceService;
@ -36,7 +37,7 @@ public class RealtimeManager {
} }
public void addPlaying(String deviceCode, Gb28181DownloadService.VideoInfo videoInfo) { public void addPlaying(String deviceCode, Gb28181DownloadService.VideoInfo videoInfo) {
RedisUtil.StringOps.set(CacheUtil.getKey(MediaSdpHelper.Action.PLAY.getAction(), deviceCode), videoInfo.getUrl()); RedisUtil.StringOps.set(CacheUtil.getKey(GB28181SDPBuilder.Action.PLAY.getAction(), deviceCode), videoInfo.getUrl());
ScheduledFuture<?> schedule = playing.get(deviceCode); ScheduledFuture<?> schedule = playing.get(deviceCode);
if(schedule != null){ if(schedule != null){
@ -80,7 +81,7 @@ public class RealtimeManager {
*/ */
private void close(String deviceCode, Gb28181DownloadService.VideoInfo videoInfo){ private void close(String deviceCode, Gb28181DownloadService.VideoInfo videoInfo){
RedisUtil.KeyOps.delete(getRealtimeKey(deviceCode)); RedisUtil.KeyOps.delete(getRealtimeKey(deviceCode));
RedisUtil.KeyOps.delete(CacheUtil.getKey(MediaSdpHelper.Action.PLAY.getAction(), deviceCode)); RedisUtil.KeyOps.delete(CacheUtil.getKey(GB28181SDPBuilder.Action.PLAY.getAction(), deviceCode));
WvpProxyDevice device = deviceService.getDeviceByDeviceCode(deviceCode).orElse(null); WvpProxyDevice device = deviceService.getDeviceByDeviceCode(deviceCode).orElse(null);
if(device == null){ if(device == null){

View File

@ -0,0 +1,28 @@
package cn.skcks.docking.gb28181.wvp.service.record;
import cn.skcks.docking.gb28181.core.sip.message.processor.message.types.recordinfo.query.dto.RecordInfoRequestDTO;
import cn.skcks.docking.gb28181.wvp.service.device.DeviceService;
import cn.skcks.docking.gb28181.wvp.service.docking.DockingService;
import cn.skcks.docking.gb28181.wvp.sip.sender.SipSender;
import cn.skcks.docking.gb28181.wvp.sip.subscribe.SipSubscribe;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@Slf4j
@Service
@RequiredArgsConstructor
public class RecordInfoService {
private final SipSender sipSender;
private final SipSubscribe sipSubscribe;
private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
private final DockingService dockingService;
private final DeviceService deviceService;
public void requestRecordInfo(String deviceCode, RecordInfoRequestDTO dto){
}
}

View File

@ -0,0 +1,46 @@
package cn.skcks.docking.gb28181.wvp.service.record.dto;
import cn.hutool.core.date.DatePattern;
import cn.skcks.docking.gb28181.constant.GB28181Constant;
import cn.skcks.docking.gb28181.core.sip.gb28181.constant.CmdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class RecordInfoDTO {
private String cmdType = CmdType.RECORD_INFO;
/**
* 命令序列号(必选)
*/
private String sn;
/**
* 目标设备的设备编码(必选)
*/
private String deviceId;
@DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN)
@JsonFormat(pattern = GB28181Constant.DATETIME_FORMAT, timezone = GB28181Constant.TIME_ZONE)
private Date startTime;
@DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN)
@JsonFormat(pattern = GB28181Constant.DATETIME_FORMAT, timezone = GB28181Constant.TIME_ZONE)
private Date endTime;
private String filePath;
private String address;
private Integer Secrecy = 0;
private String type = "all";
private String recorderId;
private Integer IndistinctQuery;
}

View File

@ -0,0 +1,14 @@
package cn.skcks.docking.gb28181.wvp.service.record.dto;
import cn.skcks.docking.gb28181.core.sip.message.processor.message.types.recordinfo.query.dto.RecordInfoRequestDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface RecordInfoDTOConvertor {
RecordInfoDTOConvertor INSTANCE = Mappers.getMapper(RecordInfoDTOConvertor.class);
RecordInfoDTO convert(RecordInfoRequestDTO dto);
RecordInfoRequestDTO convert(RecordInfoDTO dto);
}

View File

@ -2,10 +2,10 @@ package cn.skcks.docking.gb28181.wvp.sip.message.bye.request.request;
import cn.skcks.docking.gb28181.common.redis.RedisUtil; import cn.skcks.docking.gb28181.common.redis.RedisUtil;
import cn.skcks.docking.gb28181.core.sip.gb28181.cache.CacheUtil; import cn.skcks.docking.gb28181.core.sip.gb28181.cache.CacheUtil;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.MediaSdpHelper;
import cn.skcks.docking.gb28181.core.sip.listener.SipListener; import cn.skcks.docking.gb28181.core.sip.listener.SipListener;
import cn.skcks.docking.gb28181.core.sip.message.processor.MessageProcessor; import cn.skcks.docking.gb28181.core.sip.message.processor.MessageProcessor;
import cn.skcks.docking.gb28181.core.sip.message.subscribe.GenericSubscribe; import cn.skcks.docking.gb28181.core.sip.message.subscribe.GenericSubscribe;
import cn.skcks.docking.gb28181.sdp.GB28181SDPBuilder;
import cn.skcks.docking.gb28181.wvp.sip.response.SipResponseBuilder; import cn.skcks.docking.gb28181.wvp.sip.response.SipResponseBuilder;
import cn.skcks.docking.gb28181.wvp.sip.sender.SipSender; import cn.skcks.docking.gb28181.wvp.sip.sender.SipSender;
import cn.skcks.docking.gb28181.wvp.sip.subscribe.SipSubscribe; import cn.skcks.docking.gb28181.wvp.sip.subscribe.SipSubscribe;
@ -50,7 +50,7 @@ public class ByeRequestProcessor implements MessageProcessor {
.ifPresentOrElse( .ifPresentOrElse(
publisher -> publisher.submit(request), publisher -> publisher.submit(request),
() -> { () -> {
RedisUtil.KeyOps.delete(CacheUtil.getKey(MediaSdpHelper.Action.PLAY.getAction(), callId)); RedisUtil.KeyOps.delete(CacheUtil.getKey(GB28181SDPBuilder.Action.PLAY.getAction(), callId));
sender.sendResponse(ip, transport, ((provider, ip1, port) -> sender.sendResponse(ip, transport, ((provider, ip1, port) ->
SipResponseBuilder.response(request, Response.OK, "OK"))); SipResponseBuilder.response(request, Response.OK, "OK")));
}); });

View File

@ -1,9 +1,9 @@
package cn.skcks.docking.gb28181.wvp.sip.response; package cn.skcks.docking.gb28181.wvp.sip.response;
import cn.skcks.docking.gb28181.core.sip.gb28181.constant.GB28181Constant; import cn.skcks.docking.gb28181.core.sip.gb28181.constant.GB28181Constant;
import cn.skcks.docking.gb28181.core.sip.gb28181.sdp.GB28181Description;
import cn.skcks.docking.gb28181.core.sip.message.MessageHelper; import cn.skcks.docking.gb28181.core.sip.message.MessageHelper;
import cn.skcks.docking.gb28181.core.sip.utils.SipUtil; import cn.skcks.docking.gb28181.core.sip.utils.SipUtil;
import cn.skcks.docking.gb28181.sdp.GB28181Description;
import gov.nist.javax.sip.message.MessageFactoryImpl; import gov.nist.javax.sip.message.MessageFactoryImpl;
import gov.nist.javax.sip.message.SIPRequest; import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.message.SIPResponse; import gov.nist.javax.sip.message.SIPResponse;

View File

@ -36,4 +36,9 @@ public class ByeSubscribe implements GenericSubscribe<SIPRequest> {
public void delPublisher(String key) { public void delPublisher(String key) {
Helper.delPublisher(publishers, key); Helper.delPublisher(publishers, key);
} }
@Override
public void complete(String key) {
delPublisher(key);
}
} }

View File

@ -36,4 +36,9 @@ public class CatalogSubscribe implements GenericSubscribe<SIPRequest> {
public void delPublisher(String key) { public void delPublisher(String key) {
Helper.delPublisher(publishers, key); Helper.delPublisher(publishers, key);
} }
@Override
public void complete(String key) {
delPublisher(key);
}
} }

View File

@ -34,6 +34,7 @@ excludeFilters = {
"cn.skcks.docking.gb28181.service.record.*", "cn.skcks.docking.gb28181.service.record.*",
"cn.skcks.docking.gb28181.core.sip.message.request.*", "cn.skcks.docking.gb28181.core.sip.message.request.*",
"cn.skcks.docking.gb28181.service.catalog.*", "cn.skcks.docking.gb28181.service.catalog.*",
"cn.skcks.docking.gb28181.service.notify.*"
}) })
}) })
@EnableAsync @EnableAsync

View File

@ -57,7 +57,7 @@
<!-- <docker.registry.password>XXX</docker.registry.password>--> <!-- <docker.registry.password>XXX</docker.registry.password>-->
<docker.maven.plugin.version>1.4.13</docker.maven.plugin.version> <docker.maven.plugin.version>1.4.13</docker.maven.plugin.version>
<gb28181.docking.version>0.0.1-SNAPSHOT</gb28181.docking.version> <gb28181.docking.version>0.1.0-SNAPSHOT</gb28181.docking.version>
</properties> </properties>
<profiles> <profiles>