src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.conf; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.bean.CloudRecordItem; import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper; src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.conf; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.utils.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.conf; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; src/main/java/com/genersoft/iot/vmp/gb28181/bean/AudioBroadcastCatch.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.gb28181.bean; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.AudioBroadcastEvent; import gov.nist.javax.sip.message.SIPResponse; src/main/java/com/genersoft/iot/vmp/gb28181/bean/InviteStreamInfo.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.gb28181.bean; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; public class InviteStreamInfo { src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java
@@ -6,7 +6,7 @@ import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.session.SSRCFactory; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IPlatformService; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -8,7 +8,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import gov.nist.javax.sip.message.SIPRequest; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.service.bean.SSRCInfo; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -19,7 +19,7 @@ import com.genersoft.iot.vmp.media.event.hook.HookType; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.utils.DateUtil; import gov.nist.javax.sip.message.SIPRequest; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -17,8 +17,7 @@ import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.event.hook.HookType; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.HookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.service.bean.SSRCInfo; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java
@@ -11,7 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IPlayService; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -15,7 +15,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -18,6 +18,7 @@ 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.gb28181.utils.SipUtils; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.event.hook.Hook; import com.genersoft.iot.vmp.media.event.hook.HookType; import com.genersoft.iot.vmp.media.service.IMediaServerService; @@ -25,7 +26,6 @@ import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.*; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.bean.ErrorCallback; import com.genersoft.iot.vmp.service.bean.InviteErrorCode; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/BroadcastNotifyMessageHandler.java
@@ -8,8 +8,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IPlatformService; src/main/java/com/genersoft/iot/vmp/media/MediaServerConfig.java
@@ -3,7 +3,7 @@ import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/genersoft/iot/vmp/media/abl/ABLHttpHookListener.java
New file @@ -0,0 +1,410 @@ package com.genersoft.iot.vmp.media.abl; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager; import com.genersoft.iot.vmp.gb28181.session.SSRCFactory; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.media.abl.bean.hook.*; import com.genersoft.iot.vmp.media.abl.event.HookAblServerKeepaliveEvent; import com.genersoft.iot.vmp.media.abl.event.HookAblServerStartEvent; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.bean.ResultForOnPublish; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.event.media.*; import com.genersoft.iot.vmp.media.event.mediaServer.MediaSendRtpStoppedEvent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager; import com.genersoft.iot.vmp.media.zlm.dto.hook.*; import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * ABL 的hook事件监听 */ @RestController @RequestMapping("/index/hook/abl") public class ABLHttpHookListener { private final static Logger logger = LoggerFactory.getLogger(ABLHttpHookListener.class); @Autowired private ABLRESTfulUtils ablresTfulUtils; @Autowired private ISIPCommanderForPlatform commanderFroPlatform; @Autowired private AudioBroadcastManager audioBroadcastManager; @Autowired private IPlayService playService; @Autowired private IVideoManagerStorage storager; @Autowired private IRedisCatchStorage redisCatchStorage; @Autowired private IInviteStreamService inviteStreamService; @Autowired private IDeviceService deviceService; @Autowired private IMediaServerService mediaServerService; @Autowired private IStreamProxyService streamProxyService; @Autowired private DeferredResultHolder resultHolder; @Autowired private IMediaService mediaService; @Autowired private EventPublisher eventPublisher; @Autowired private ZLMMediaListManager zlmMediaListManager; @Autowired private HookSubscribe subscribe; @Autowired private UserSetting userSetting; @Autowired private IUserService userService; @Autowired private ICloudRecordService cloudRecordService; @Autowired private VideoStreamSessionManager sessionManager; @Autowired private SSRCFactory ssrcFactory; @Qualifier("taskExecutor") @Autowired private ThreadPoolTaskExecutor taskExecutor; @Autowired private RedisTemplate<Object, Object> redisTemplate; @Autowired private ApplicationEventPublisher applicationEventPublisher; /** * 服务器定时上报时间,上报间隔可配置,默认10s上报一次 */ @ResponseBody @PostMapping(value = "/on_server_keepalive", produces = "application/json;charset=UTF-8") public HookResult onServerKeepalive(@RequestBody OnServerKeepaliveABLHookParam param) { try { HookAblServerKeepaliveEvent event = new HookAblServerKeepaliveEvent(this); MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); if (mediaServerItem != null) { event.setMediaServerItem(mediaServerItem); applicationEventPublisher.publishEvent(event); } }catch (Exception e) { logger.info("[ZLM-HOOK-心跳] 发送通知失败 ", e); } return HookResult.SUCCESS(); } /** * 播放器鉴权事件,rtsp/rtmp/http-flv/ws-flv/hls的播放都将触发此鉴权事件。 */ @ResponseBody @PostMapping(value = "/on_play", produces = "application/json;charset=UTF-8") public HookResult onPlay(@RequestBody OnPlayABLHookParam param) { MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); if (mediaServer == null) { return new HookResultForOnPublish(0, "success"); } Map<String, String> paramMap = urlParamToMap(param.getParams()); // 对于播放流进行鉴权 boolean authenticateResult = mediaService.authenticatePlay(param.getApp(), param.getStream(), paramMap.get("callId")); if (!authenticateResult) { logger.info("[ABL HOOK] 播放鉴权 失败:{}->{}", param.getMediaServerId(), param); ablresTfulUtils.closeStreams(mediaServer, param.getApp(), param.getStream()); } logger.info("[ABL HOOK] 播放鉴权成功:{}->{}", param.getMediaServerId(), param); return HookResult.SUCCESS(); } /** * rtsp/rtmp/rtp推流鉴权事件。 */ @ResponseBody @PostMapping(value = "/on_publish", produces = "application/json;charset=UTF-8") public HookResult onPublish(@RequestBody OnPublishABLHookParam param) { logger.info("[ABL HOOK]推流鉴权:{}->{}", param.getMediaServerId(), param); // TODO 加快处理速度 MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); if (mediaServer == null) { return new HookResultForOnPublish(0, "success"); } ResultForOnPublish resultForOnPublish = mediaService.authenticatePublish(mediaServer, param.getApp(), param.getStream(), param.getParams()); if (resultForOnPublish == null) { logger.info("[ABL HOOK]推流鉴权 拒绝 响应:{}->{}", param.getMediaServerId(), param); ablresTfulUtils.closeStreams(mediaServer, param.getApp(), param.getStream()); } return HookResult.SUCCESS(); } /** * 如果某一个码流进行MP4录像(enable_mp4=1),会触发录像进度通知事件 */ @ResponseBody @PostMapping(value = "/on_record_progress", produces = "application/json;charset=UTF-8") public HookResult onRecordProgress(@RequestBody OnRecordProgressABLHookParam param) { logger.info("[ABL HOOK] 录像进度通知:{}->{}/{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream(), param.getCurrentFileDuration(), param.getTotalVideoDuration()); // TODO 这里用来做录像进度 // MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); // if (mediaServer == null) { // return new HookResultForOnPublish(0, "success"); // } // // ResultForOnPublish resultForOnPublish = mediaService.authenticatePublish(mediaServer, param.getApp(), param.getStream(), param.getParams()); // if (resultForOnPublish == null) { // logger.info("[ABL HOOK]推流鉴权 拒绝 响应:{}->{}", param.getMediaServerId(), param); // ablresTfulUtils.closeStreams(mediaServer, param.getApp(), param.getStream()); // } return HookResult.SUCCESS(); } /** * 当代理拉流、国标接入等等 码流不到达时会发出 码流不到达的事件通知 */ @ResponseBody @PostMapping(value = "/on_stream_not_arrive", produces = "application/json;charset=UTF-8") public HookResult onStreamNotArrive(@RequestBody ABLHookParam param) { logger.info("[ABL HOOK] 码流不到达通知:{}->{}/{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream(), param.getCurrentFileDuration(), param.getTotalVideoDuration()); try { if ("rtp".equals(param.getApp())) { return HookResult.SUCCESS(); } MediaRtpServerTimeoutEvent event = new MediaRtpServerTimeoutEvent(this); MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); if (mediaServerItem != null) { event.setMediaServer(mediaServerItem); event.setApp("rtp"); applicationEventPublisher.publishEvent(event); } }catch (Exception e) { logger.info("[ABL-HOOK-码流不到达通知] 发送通知失败 ", e); } return HookResult.SUCCESS(); } /** * 如果某一个码流进行MP4录像(enable_mp4=1),当某个MP4文件被删除会触发该事件通知 */ @ResponseBody @PostMapping(value = "/on_delete_record_mp4", produces = "application/json;charset=UTF-8") public HookResult onDeleteRecordMp4(@RequestBody OnRecordMp4ABLHookParam param) { logger.info("[ABL HOOK] MP4文件被删除通知:{}->{}/{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream(), param.getCurrentFileDuration(), param.getTotalVideoDuration()); return HookResult.SUCCESS(); } /** * rtsp/rtmp流注册或注销时触发此事件;此事件对回复不敏感。 */ @ResponseBody @PostMapping(value = "/on_stream_arrive", produces = "application/json;charset=UTF-8") public HookResult onStreamArrive(@RequestBody OnStreamArriveABLHookParam param) { MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); if (mediaServer == null) { return HookResult.SUCCESS(); } logger.info("[ABL HOOK] 码流到达, {}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream()); MediaArrivalEvent mediaArrivalEvent = MediaArrivalEvent.getInstance(this, param, mediaServer); applicationEventPublisher.publishEvent(mediaArrivalEvent); return HookResult.SUCCESS(); } /** * 流无人观看时事件,用户可以通过此事件选择是否关闭无人看的流。 */ @ResponseBody @PostMapping(value = "/on_stream_none_reader", produces = "application/json;charset=UTF-8") public JSONObject onStreamNoneReader(@RequestBody ABLHookParam param) { logger.info("[ZLM HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream()); JSONObject ret = new JSONObject(); boolean close = mediaService.closeStreamOnNoneReader(param.getMediaServerId(), param.getApp(), param.getStream(), null); ret.put("code", close); return ret; } /** * 当播放一个url,如果不存在时,会发出一个消息通知 */ @ResponseBody @PostMapping(value = "/on_stream_not_found", produces = "application/json;charset=UTF-8") public HookResult onStreamNotFound(@RequestBody ABLHookParam param) { logger.info("[ABL HOOK] 流未找到:{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream()); MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); if (!userSetting.isAutoApplyPlay() || mediaServer == null) { return HookResult.SUCCESS(); } MediaNotFoundEvent mediaNotFoundEvent = MediaNotFoundEvent.getInstance(this, param, mediaServer); applicationEventPublisher.publishEvent(mediaNotFoundEvent); return HookResult.SUCCESS(); } /** * ABLMediaServer启动时会发送上线通知 */ @ResponseBody @PostMapping(value = "/on_server_started", produces = "application/json;charset=UTF-8") public HookResult onServerStarted(HttpServletRequest request, @RequestBody OnServerStaredABLHookParam param) { logger.info("[ABL HOOK] 启动 " + param.getMediaServerId()); try { HookAblServerStartEvent event = new HookAblServerStartEvent(this); MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); if (mediaServerItem != null) { event.setMediaServerItem(mediaServerItem); applicationEventPublisher.publishEvent(event); } }catch (Exception e) { logger.info("[ABL-HOOK-启动] 发送通知失败 ", e); } return HookResult.SUCCESS(); } /** * TODO 发送rtp(startSendRtp)被动关闭时回调 */ // @ResponseBody // @PostMapping(value = "/on_send_rtp_stopped", produces = "application/json;charset=UTF-8") // public HookResult onSendRtpStopped(HttpServletRequest request, @RequestBody OnSendRtpStoppedHookParam param) { // // logger.info("[ZLM HOOK] rtp发送关闭:{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream()); // // // 查找对应的上级推流,发送停止 // if (!"rtp".equals(param.getApp())) { // return HookResult.SUCCESS(); // } // try { // MediaSendRtpStoppedEvent event = new MediaSendRtpStoppedEvent(this); // MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); // if (mediaServerItem != null) { // event.setMediaServer(mediaServerItem); // applicationEventPublisher.publishEvent(event); // } // }catch (Exception e) { // logger.info("[ZLM-HOOK-rtp发送关闭] 发送通知失败 ", e); // } // // return HookResult.SUCCESS(); // } /** * TODO 录像完成事件 */ @ResponseBody @PostMapping(value = "/on_record_mp4", produces = "application/json;charset=UTF-8") public HookResult onRecordMp4(HttpServletRequest request, @RequestBody OnRecordMp4ABLHookParam param) { logger.info("[ABL HOOK] 录像完成事件:{}->{}", param.getMediaServerId(), param.getFileName()); // try { // MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); // if (mediaServerItem != null) { // MediaRecordMp4Event event = MediaRecordMp4Event.getInstance(this, param, mediaServerItem); // event.setMediaServer(mediaServerItem); // applicationEventPublisher.publishEvent(event); // } // }catch (Exception e) { // logger.info("[ZLM-HOOK-rtpServer收流超时] 发送通知失败 ", e); // } return HookResult.SUCCESS(); } /** * 当某一路码流断开时会发送通知 */ @ResponseBody @PostMapping(value = "/on_stream_disconnect", produces = "application/json;charset=UTF-8") public HookResult onRecordMp4(HttpServletRequest request, @RequestBody ABLHookParam param) { logger.info("[ABL HOOK] 码流断开事件, {}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream()); MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); if (mediaServer == null) { return HookResult.SUCCESS(); } MediaDepartureEvent mediaDepartureEvent = MediaDepartureEvent.getInstance(this, param, mediaServer); applicationEventPublisher.publishEvent(mediaDepartureEvent); return HookResult.SUCCESS(); } private Map<String, String> urlParamToMap(String params) { HashMap<String, String> map = new HashMap<>(); if (ObjectUtils.isEmpty(params)) { return map; } String[] paramsArray = params.split("&"); if (paramsArray.length == 0) { return map; } for (String param : paramsArray) { String[] paramArray = param.split("="); if (paramArray.length == 2) { map.put(paramArray[0], paramArray[1]); } } return map; } } src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java
@@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.service.IMediaNodeServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import org.springframework.stereotype.Service; src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java
@@ -11,7 +11,7 @@ import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerDeleteEvent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java
@@ -2,7 +2,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import okhttp3.*; import okhttp3.logging.HttpLoggingInterceptor; import org.jetbrains.annotations.NotNull; src/main/java/com/genersoft/iot/vmp/media/abl/bean/AblUrls.java
New file @@ -0,0 +1,58 @@ package com.genersoft.iot.vmp.media.abl.bean; public class AblUrls { private String rtsp; private String rtmp; private String httpFlv; private String wsFlv; private String httpMp4; private String httpHls; public String getRtsp() { return rtsp; } public void setRtsp(String rtsp) { this.rtsp = rtsp; } public String getRtmp() { return rtmp; } public void setRtmp(String rtmp) { this.rtmp = rtmp; } public String getHttpFlv() { return httpFlv; } public void setHttpFlv(String httpFlv) { this.httpFlv = httpFlv; } public String getWsFlv() { return wsFlv; } public void setWsFlv(String wsFlv) { this.wsFlv = wsFlv; } public String getHttpMp4() { return httpMp4; } public void setHttpMp4(String httpMp4) { this.httpMp4 = httpMp4; } public String getHttpHls() { return httpHls; } public void setHttpHls(String httpHls) { this.httpHls = httpHls; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/ABLHookParam.java
New file @@ -0,0 +1,65 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class ABLHookParam { private String mediaServerId; /** * 应用名 */ private String app; /** * 流id */ private String stream; /** * 媒体流来源编号,可以根据这个key进行关闭流媒体 可以调用delMediaStream或close_streams 函数进行关闭 */ private String key; /** * 媒体流来源网络编号,可参考附表 */ private String networkType; public String getMediaServerId() { return mediaServerId; } public void setMediaServerId(String mediaServerId) { this.mediaServerId = mediaServerId; } public String getApp() { return app; } public void setApp(String app) { this.app = app; } public String getStream() { return stream; } public void setStream(String stream) { this.stream = stream; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getNetworkType() { return networkType; } public void setNetworkType(String networkType) { this.networkType = networkType; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnPlayABLHookParam.java
New file @@ -0,0 +1,31 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class OnPlayABLHookParam extends ABLHookParam{ private String ip; private Integer port; private String params; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnPublishABLHookParam.java
New file @@ -0,0 +1,31 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class OnPublishABLHookParam extends ABLHookParam{ private String ip; private Integer port; private String params; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnRecordMp4ABLHookParam.java
New file @@ -0,0 +1,13 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class OnRecordMp4ABLHookParam extends ABLHookParam{ private String fileName; public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnRecordProgressABLHookParam.java
New file @@ -0,0 +1,22 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class OnRecordProgressABLHookParam extends OnRecordMp4ABLHookParam{ private Integer currentFileDuration; private Integer TotalVideoDuration; public Integer getCurrentFileDuration() { return currentFileDuration; } public void setCurrentFileDuration(Integer currentFileDuration) { this.currentFileDuration = currentFileDuration; } public Integer getTotalVideoDuration() { return TotalVideoDuration; } public void setTotalVideoDuration(Integer totalVideoDuration) { TotalVideoDuration = totalVideoDuration; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnServerKeepaliveABLHookParam.java
New file @@ -0,0 +1,32 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class OnServerKeepaliveABLHookParam { private String localipAddress; private String mediaServerId; private String datetime; public String getLocalipAddress() { return localipAddress; } public void setLocalipAddress(String localipAddress) { this.localipAddress = localipAddress; } public String getMediaServerId() { return mediaServerId; } public void setMediaServerId(String mediaServerId) { this.mediaServerId = mediaServerId; } public String getDatetime() { return datetime; } public void setDatetime(String datetime) { this.datetime = datetime; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnServerStaredABLHookParam.java
New file @@ -0,0 +1,32 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; public class OnServerStaredABLHookParam { private String localipAddress; private String mediaServerId; private String datetime; public String getLocalipAddress() { return localipAddress; } public void setLocalipAddress(String localipAddress) { this.localipAddress = localipAddress; } public String getMediaServerId() { return mediaServerId; } public void setMediaServerId(String mediaServerId) { this.mediaServerId = mediaServerId; } public String getDatetime() { return datetime; } public void setDatetime(String datetime) { this.datetime = datetime; } } src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/OnStreamArriveABLHookParam.java
New file @@ -0,0 +1,245 @@ package com.genersoft.iot.vmp.media.abl.bean.hook; import com.genersoft.iot.vmp.media.abl.bean.AblUrls; /** * 流到来的事件 */ public class OnStreamArriveABLHookParam extends ABLHookParam{ /** * 推流鉴权Id */ private String callId; /** * 状态 */ private Boolean status; /** * */ private Boolean enableHls; /** * */ private Boolean transcodingStatus; /** * */ private String sourceURL; /** * */ private Integer readerCount; /** * */ private Integer noneReaderDuration; /** * */ private String videoCodec; /** * */ private Integer videoFrameSpeed; /** * */ private Integer width; /** * */ private Integer height; /** * */ private Integer videoBitrate; /** * */ private String audioCodec; /** * */ private Integer audioChannels; /** * */ private Integer audioSampleRate; /** * */ private Integer audioBitrate; private AblUrls url; public String getCallId() { return callId; } public void setCallId(String callId) { this.callId = callId; } public Boolean getStatus() { return status; } public void setStatus(Boolean status) { this.status = status; } public Boolean getEnableHls() { return enableHls; } public void setEnableHls(Boolean enableHls) { this.enableHls = enableHls; } public Boolean getTranscodingStatus() { return transcodingStatus; } public void setTranscodingStatus(Boolean transcodingStatus) { this.transcodingStatus = transcodingStatus; } public String getSourceURL() { return sourceURL; } public void setSourceURL(String sourceURL) { this.sourceURL = sourceURL; } public Integer getReaderCount() { return readerCount; } public void setReaderCount(Integer readerCount) { this.readerCount = readerCount; } public Integer getNoneReaderDuration() { return noneReaderDuration; } public void setNoneReaderDuration(Integer noneReaderDuration) { this.noneReaderDuration = noneReaderDuration; } public String getVideoCodec() { return videoCodec; } public void setVideoCodec(String videoCodec) { this.videoCodec = videoCodec; } public Integer getVideoFrameSpeed() { return videoFrameSpeed; } public void setVideoFrameSpeed(Integer videoFrameSpeed) { this.videoFrameSpeed = videoFrameSpeed; } public Integer getWidth() { return width; } public void setWidth(Integer width) { this.width = width; } public Integer getHeight() { return height; } public void setHeight(Integer height) { this.height = height; } public Integer getVideoBitrate() { return videoBitrate; } public void setVideoBitrate(Integer videoBitrate) { this.videoBitrate = videoBitrate; } public String getAudioCodec() { return audioCodec; } public void setAudioCodec(String audioCodec) { this.audioCodec = audioCodec; } public Integer getAudioChannels() { return audioChannels; } public void setAudioChannels(Integer audioChannels) { this.audioChannels = audioChannels; } public Integer getAudioSampleRate() { return audioSampleRate; } public void setAudioSampleRate(Integer audioSampleRate) { this.audioSampleRate = audioSampleRate; } public Integer getAudioBitrate() { return audioBitrate; } public void setAudioBitrate(Integer audioBitrate) { this.audioBitrate = audioBitrate; } public AblUrls getUrl() { return url; } public void setUrl(AblUrls url) { this.url = url; } } src/main/java/com/genersoft/iot/vmp/media/abl/event/HookAblServerKeepaliveEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.abl.event; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.springframework.context.ApplicationEvent; /** src/main/java/com/genersoft/iot/vmp/media/abl/event/HookAblServerStartEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.abl.event; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.springframework.context.ApplicationEvent; /** src/main/java/com/genersoft/iot/vmp/media/bean/MediaInfo.java
@@ -2,7 +2,7 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.abl.bean.hook.OnStreamArriveABLHookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import io.swagger.v3.oas.annotations.media.Schema; @@ -177,6 +177,24 @@ return mediaInfo; } public static MediaInfo getInstance(OnStreamArriveABLHookParam param, MediaServer mediaServer) { MediaInfo mediaInfo = new MediaInfo(); mediaInfo.setApp(param.getApp()); mediaInfo.setStream(param.getStream()); mediaInfo.setMediaServer(mediaServer); mediaInfo.setReaderCount(param.getReaderCount()); mediaInfo.setOnline(true); mediaInfo.setVideoCodec(param.getVideoCodec()); mediaInfo.setWidth(param.getWidth()); mediaInfo.setHeight(param.getHeight()); mediaInfo.setAudioCodec(param.getAudioCodec()); mediaInfo.setAudioChannels(param.getAudioChannels()); mediaInfo.setAudioSampleRate(param.getAudioSampleRate()); return mediaInfo; } public Integer getReaderCount() { return readerCount; } src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java
File was renamed from src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServer.java @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.media.zlm.dto; package com.genersoft.iot.vmp.media.bean; import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig; import io.swagger.v3.oas.annotations.media.Schema; import org.springframework.util.ObjectUtils; src/main/java/com/genersoft/iot/vmp/media/bean/RecordInfo.java
@@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.media.bean; import com.genersoft.iot.vmp.media.abl.bean.hook.OnRecordMp4ABLHookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam; public class RecordInfo { @@ -23,6 +24,12 @@ return recordInfo; } public static RecordInfo getInstance(OnRecordMp4ABLHookParam hookParam) { RecordInfo recordInfo = new RecordInfo(); recordInfo.setFileName(hookParam.getFileName()); return recordInfo; } public String getFileName() { return fileName; } src/main/java/com/genersoft/iot/vmp/media/event/hook/HookData.java
@@ -6,7 +6,7 @@ import com.genersoft.iot.vmp.media.event.media.MediaEvent; import com.genersoft.iot.vmp.media.event.media.MediaPublishEvent; import com.genersoft.iot.vmp.media.event.media.MediaRecordMp4Event; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import io.swagger.v3.oas.annotations.media.Schema; /** src/main/java/com/genersoft/iot/vmp/media/event/media/MediaArrivalEvent.java
@@ -1,7 +1,8 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.abl.bean.hook.OnStreamArriveABLHookParam; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; /** @@ -22,6 +23,15 @@ mediaArrivalEvent.setCallId(hookParam.getCallId()); return mediaArrivalEvent; } public static MediaArrivalEvent getInstance(Object source, OnStreamArriveABLHookParam hookParam, MediaServer mediaServer){ MediaArrivalEvent mediaArrivalEvent = new MediaArrivalEvent(source); mediaArrivalEvent.setMediaInfo(MediaInfo.getInstance(hookParam, mediaServer)); mediaArrivalEvent.setApp(hookParam.getApp()); mediaArrivalEvent.setStream(hookParam.getStream()); mediaArrivalEvent.setMediaServer(mediaServer); mediaArrivalEvent.setCallId(hookParam.getCallId()); return mediaArrivalEvent; } private MediaInfo mediaInfo; src/main/java/com/genersoft/iot/vmp/media/event/media/MediaDepartureEvent.java
@@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.abl.bean.hook.ABLHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; /** @@ -19,4 +20,12 @@ mediaDepartureEven.setMediaServer(mediaServer); return mediaDepartureEven; } public static MediaDepartureEvent getInstance(Object source, ABLHookParam hookParam, MediaServer mediaServer){ MediaDepartureEvent mediaDepartureEven = new MediaDepartureEvent(source); mediaDepartureEven.setApp(hookParam.getApp()); mediaDepartureEven.setStream(hookParam.getStream()); mediaDepartureEven.setMediaServer(mediaServer); return mediaDepartureEven; } } src/main/java/com/genersoft/iot/vmp/media/event/media/MediaEvent.java
@@ -1,8 +1,6 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.springframework.context.ApplicationEvent; /** src/main/java/com/genersoft/iot/vmp/media/event/media/MediaNotFoundEvent.java
@@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.abl.bean.hook.ABLHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamNotFoundHookParam; /** @@ -19,4 +20,12 @@ mediaDepartureEven.setMediaServer(mediaServer); return mediaDepartureEven; } public static MediaNotFoundEvent getInstance(Object source, ABLHookParam hookParam, MediaServer mediaServer){ MediaNotFoundEvent mediaDepartureEven = new MediaNotFoundEvent(source); mediaDepartureEven.setApp(hookParam.getApp()); mediaDepartureEven.setStream(hookParam.getStream()); mediaDepartureEven.setMediaServer(mediaServer); return mediaDepartureEven; } } src/main/java/com/genersoft/iot/vmp/media/event/media/MediaPublishEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnPublishHookParam; /** src/main/java/com/genersoft/iot/vmp/media/event/media/MediaRecordMp4Event.java
@@ -1,9 +1,10 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.abl.ABLHttpHookListener; import com.genersoft.iot.vmp.media.abl.bean.hook.OnRecordMp4ABLHookParam; import com.genersoft.iot.vmp.media.bean.RecordInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; /** * 录像文件生成事件 @@ -25,6 +26,16 @@ return mediaRecordMp4Event; } public static MediaRecordMp4Event getInstance(ABLHttpHookListener source, OnRecordMp4ABLHookParam hookParam, MediaServer mediaServer) { MediaRecordMp4Event mediaRecordMp4Event = new MediaRecordMp4Event(source); mediaRecordMp4Event.setApp(hookParam.getApp()); mediaRecordMp4Event.setStream(hookParam.getStream()); RecordInfo recordInfo = RecordInfo.getInstance(hookParam); mediaRecordMp4Event.setRecordInfo(recordInfo); mediaRecordMp4Event.setMediaServer(mediaServer); return mediaRecordMp4Event; } public RecordInfo getRecordInfo() { return recordInfo; } src/main/java/com/genersoft/iot/vmp/media/event/media/MediaRtpServerTimeoutEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.event.media; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; /** src/main/java/com/genersoft/iot/vmp/media/event/mediaServer/MediaSendRtpStoppedEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.event.mediaServer; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamNotFoundHookParam; import org.springframework.context.ApplicationEvent; src/main/java/com/genersoft/iot/vmp/media/event/mediaServer/MediaServerChangeEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.event.mediaServer; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.springframework.context.ApplicationEvent; import java.util.ArrayList; src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java
@@ -3,7 +3,7 @@ import com.genersoft.iot.vmp.common.CommonCallback; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import java.util.List; src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java
@@ -3,7 +3,7 @@ import com.genersoft.iot.vmp.common.CommonCallback; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java
@@ -15,7 +15,7 @@ import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerDeleteEvent; import com.genersoft.iot.vmp.media.service.IMediaNodeServerService; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.service.IInviteStreamService; import com.genersoft.iot.vmp.service.bean.MediaServerLoad; src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
@@ -2,7 +2,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.utils.SSLSocketClientUtil; import okhttp3.*; import okhttp3.logging.HttpLoggingInterceptor; src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java
@@ -3,7 +3,7 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -15,7 +15,7 @@ import com.genersoft.iot.vmp.media.event.media.*; import com.genersoft.iot.vmp.media.event.mediaServer.MediaSendRtpStoppedEvent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig; import com.genersoft.iot.vmp.media.zlm.dto.hook.*; import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerKeepaliveEvent; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -2,6 +2,7 @@ import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.GbStream; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.*; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java
@@ -8,7 +8,7 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.service.IMediaNodeServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManger.java
@@ -8,7 +8,7 @@ import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerDeleteEvent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig; import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerKeepaliveEvent; import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerStartEvent; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -2,7 +2,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import okhttp3.*; import okhttp3.logging.HttpLoggingInterceptor; import org.jetbrains.annotations.NotNull; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java
@@ -6,7 +6,7 @@ import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItemLite.java
File was deleted src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookParam.java
@@ -7,6 +7,8 @@ public class HookParam { private String mediaServerId; public String getMediaServerId() { return mediaServerId; } src/main/java/com/genersoft/iot/vmp/media/zlm/event/HookZlmServerKeepaliveEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.zlm.event; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.springframework.context.ApplicationEvent; /** src/main/java/com/genersoft/iot/vmp/media/zlm/event/HookZlmServerStartEvent.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.media.zlm.event; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.springframework.context.ApplicationEvent; /** src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java
@@ -1,8 +1,7 @@ package com.genersoft.iot.vmp.service; import com.alibaba.fastjson2.JSONArray; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.CloudRecordItem; import com.genersoft.iot.vmp.service.bean.DownloadFileInfo; import com.github.pagehelper.PageInfo; src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
@@ -1,9 +1,7 @@ package com.genersoft.iot.vmp.service; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.bean.ResultForOnPublish; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; /** * 媒体信息业务 src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
@@ -4,7 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.InviteTimeOutCallback; import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo; import com.github.pagehelper.PageInfo; src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
@@ -8,8 +8,7 @@ import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.HookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.ErrorCallback; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult; src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
@@ -2,7 +2,7 @@ import com.genersoft.iot.vmp.common.GeneralCallback; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java
@@ -2,7 +2,7 @@ import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import java.util.EventObject; src/main/java/com/genersoft/iot/vmp/service/bean/ResponseSendItemMsg.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.service.bean; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; /** * redis消息:下级回复推送信息 src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java
@@ -5,12 +5,10 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent; import com.genersoft.iot.vmp.media.event.media.MediaRecordMp4Event; import com.genersoft.iot.vmp.media.zlm.AssistRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam; import com.genersoft.iot.vmp.service.ICloudRecordService; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.bean.CloudRecordItem; src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -14,7 +14,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IDeviceChannelService; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.service.IInviteStreamService; src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
@@ -12,7 +12,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.media.bean.ResultForOnPublish; import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.service.*; src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -11,15 +11,13 @@ import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.utils.SipUtils; import com.genersoft.iot.vmp.media.event.hook.Hook; import com.genersoft.iot.vmp.media.event.hook.HookData; import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent; import com.genersoft.iot.vmp.media.event.mediaServer.MediaSendRtpStoppedEvent; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IInviteStreamService; import com.genersoft.iot.vmp.service.IPlatformService; import com.genersoft.iot.vmp.service.IPlayService; src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -19,7 +19,6 @@ import com.genersoft.iot.vmp.media.bean.MediaInfo; import com.genersoft.iot.vmp.media.bean.RecordInfo; import com.genersoft.iot.vmp.media.event.hook.Hook; import com.genersoft.iot.vmp.media.event.hook.HookData; import com.genersoft.iot.vmp.media.event.hook.HookType; import com.genersoft.iot.vmp.media.event.media.MediaArrivalEvent; import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent; @@ -28,10 +27,7 @@ import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.HookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.bean.*; import com.genersoft.iot.vmp.service.redisMsg.RedisGbPlayMsgListener; src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
@@ -17,7 +17,7 @@ import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.service.IGbStreamService; src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -14,7 +14,7 @@ import com.genersoft.iot.vmp.media.event.media.MediaArrivalEvent; import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java
@@ -10,7 +10,7 @@ import com.genersoft.iot.vmp.media.event.hook.HookType; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.bean.*; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamCloseResponseListener.java
@@ -7,7 +7,7 @@ import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IStreamPushService; src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -7,7 +7,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.media.event.media.MediaArrivalEvent; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.storager.dao; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.CloudRecordItem; import org.apache.ibatis.annotations.*; src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.storager.dao; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import org.apache.ibatis.annotations.*; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -10,7 +10,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.media.event.media.MediaArrivalEvent; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; src/main/java/com/genersoft/iot/vmp/utils/CloudRecordUtils.java
@@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.utils; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.bean.DownloadFileInfo; public class CloudRecordUtils { src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java
@@ -3,7 +3,7 @@ import com.alibaba.fastjson2.JSONArray; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.security.JwtUtils; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.ICloudRecordService; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.bean.CloudRecordItem; src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -17,7 +17,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IInviteStreamService; import com.genersoft.iot.vmp.service.IPlayService; import com.genersoft.iot.vmp.service.bean.InviteErrorCode; src/main/java/com/genersoft/iot/vmp/vmanager/ps/PsController.java
@@ -11,8 +11,7 @@ import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRtpServerTimeoutHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; src/main/java/com/genersoft/iot/vmp/vmanager/rtp/RtpController.java
@@ -11,8 +11,7 @@ import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRtpServerTimeoutHookParam; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
@@ -9,10 +9,8 @@ import com.genersoft.iot.vmp.conf.VersionInfo; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.security.JwtUtils; import com.genersoft.iot.vmp.media.event.hook.HookSubscribe; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
@@ -7,7 +7,7 @@ import com.genersoft.iot.vmp.conf.security.JwtUtils; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IStreamProxyService; src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
@@ -9,7 +9,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.media.zlm.dto.MediaServer; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.service.IInviteStreamService; import com.genersoft.iot.vmp.service.IPlayService;