From 48eff320fd095d5567b386c9efa646be21a8b4e7 Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Wed, 9 Jul 2025 12:32:31 +0800 Subject: [PATCH] =?UTF-8?q?[1078]=20=E9=80=82=E9=85=8Dabl=E7=9A=84?= =?UTF-8?q?=E6=92=AD=E6=94=BE1078?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../genersoft/iot/vmp/common/StreamInfo.java | 2 +- .../genersoft/iot/vmp/conf/MediaConfig.java | 16 +- .../vmp/jt1078/codec/decode/Jt808Decoder.java | 2 +- .../jt1078/controller/JT1078Controller.java | 86 +-- .../genersoft/iot/vmp/jt1078/proc/Header.java | 42 +- .../service/impl/jt1078PlayServiceImpl.java | 83 +-- .../service/impl/jt1078ServiceImpl.java | 6 +- .../media/abl/ABLMediaNodeServerService.java | 18 +- .../media/abl/ABLMediaServerStatusManger.java | 3 + .../iot/vmp/media/abl/ABLRESTfulUtils.java | 16 +- .../vmp/media/abl/bean/AblServerConfig.java | 565 +----------------- .../iot/vmp/media/bean/MediaServer.java | 5 +- .../service/IMediaNodeServerService.java | 8 +- .../media/service/IMediaServerService.java | 4 + .../service/impl/MediaServerServiceImpl.java | 38 +- .../media/zlm/ZLMMediaNodeServerService.java | 11 +- .../vmp/service/impl/MediaServiceImpl.java | 2 +- .../vmp/storager/dao/MediaServerMapper.java | 3 + 数据库/2.7.4/更新-mysql-2.7.4.sql | 98 +++ .../2.7.4/更新-postgresql-kingbase-2.7.4.sql | 35 ++ 数据库/JT1078-2.7.2/更新-mysql-2.7.2.sql | 79 --- .../更新-postgresql-kingbase-2.7.2.sql | 31 - 数据库/JT1078-2.7.3/更新-mysql-2.7.3.sql | 81 --- .../更新-postgresql-kingbase-2.7.3.sql | 33 - 24 files changed, 336 insertions(+), 931 deletions(-) delete mode 100644 数据库/JT1078-2.7.2/更新-mysql-2.7.2.sql delete mode 100644 数据库/JT1078-2.7.2/更新-postgresql-kingbase-2.7.2.sql delete mode 100644 数据库/JT1078-2.7.3/更新-mysql-2.7.3.sql delete mode 100644 数据库/JT1078-2.7.3/更新-postgresql-kingbase-2.7.3.sql diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java index 28e7d6416..9c186ad33 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java @@ -182,7 +182,7 @@ public class StreamInfo implements Serializable, Cloneable{ if (callIdParam != null) { callIdParam = Objects.equals(callIdParam, "") ? callIdParam : callIdParam.replace("?", "&"); } - String file = String.format("index/api/webrtc?app=%s&stream=%s&type=%s%s", app, stream, isPlay?"play":"push", callIdParam); + String file = String.format("%s/%s?type=%s%s", app, stream, isPlay?"play":"push", callIdParam); if (port > 0) { this.rtc = new StreamURL("http", host, port, file); } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java index ef9669d5d..10453bb26 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java @@ -66,6 +66,9 @@ public class MediaConfig{ @Value("${media.rtp-proxy-port:0}") private Integer rtpProxyPort = 0; + @Value("${media.jtt-proxy-port:0}") + private Integer jttProxyPort = 0; + @Value("${media.rtsp-port:0}") private Integer rtspPort = 0; @@ -122,7 +125,7 @@ public class MediaConfig{ public int getRtmpPort() { return rtmpPort; } - + public int getRtmpSSlPort() { return rtmpSSlPort; } @@ -136,6 +139,14 @@ public class MediaConfig{ } + public Integer getJttProxyPort() { + if (jttProxyPort == null) { + return 0; + }else { + return jttProxyPort; + } + } + public int getRtspPort() { return rtspPort; } @@ -159,7 +170,7 @@ public class MediaConfig{ public String getRtpPortRange() { return rtpPortRange; } - + public int getRecordAssistPort() { return recordAssistPort; } @@ -229,6 +240,7 @@ public class MediaConfig{ mediaServer.setRtmpPort(rtmpPort); mediaServer.setRtmpSSlPort(rtmpSSlPort); mediaServer.setRtpProxyPort(getRtpProxyPort()); + mediaServer.setJttProxyPort(getJttProxyPort()); mediaServer.setRtspPort(rtspPort); mediaServer.setRtspSSLPort(rtspSSLPort); mediaServer.setAutoConfig(autoConfig); diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/codec/decode/Jt808Decoder.java b/src/main/java/com/genersoft/iot/vmp/jt1078/codec/decode/Jt808Decoder.java index 7368c9fbe..0477280a4 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/codec/decode/Jt808Decoder.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/codec/decode/Jt808Decoder.java @@ -40,7 +40,7 @@ public class Jt808Decoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { Session session = ctx.channel().attr(Session.KEY).get(); - log.info("> {} hex:{}", session, ByteBufUtil.hexDump(in)); + log.info("> {} hex: 7e{}7e", session, ByteBufUtil.hexDump(in)); try { ByteBuf buf = unEscapeAndCheck(in); diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java index bd776fc3d..b42610819 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java @@ -88,7 +88,7 @@ public class JT1078Controller { } DeferredResult> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); result.onTimeout(()->{ - log.info("[1078-点播等待超时] phoneNumber:{}, channelId:{}, ", phoneNumber, channelId); + log.info("[JT-点播等待超时] phoneNumber:{}, channelId:{}, ", phoneNumber, channelId); // 释放rtpserver WVPResult wvpResult = new WVPResult<>(); wvpResult.setCode(ErrorCode.ERROR100.getCode()); @@ -152,7 +152,7 @@ public class JT1078Controller { @Parameter(required = false) Boolean onlySend) { DeferredResult> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); result.onTimeout(()->{ - log.info("[1078-语音对讲超时] phoneNumber:{}, channelId:{}, ", phoneNumber, channelId); + log.info("[JT-语音对讲超时] phoneNumber:{}, channelId:{}, ", phoneNumber, channelId); // 释放rtpserver WVPResult wvpResult = new WVPResult<>(); wvpResult.setCode(ErrorCode.ERROR100.getCode()); @@ -275,7 +275,7 @@ public class JT1078Controller { ) { DeferredResult> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); result.onTimeout(()->{ - log.info("[1078-回放-等待超时] phoneNumber:{}, channelId:{}, ", phoneNumber, channelId); + log.info("[JT-回放-等待超时] phoneNumber:{}, channelId:{}, ", phoneNumber, channelId); // 释放rtpserver WVPResult wvpResult = new WVPResult<>(); wvpResult.setCode(ErrorCode.ERROR100.getCode()); @@ -359,7 +359,7 @@ public class JT1078Controller { @Parameter(required = false) Integer storageType ) throws IOException { - log.info("[1078-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},报警标志: {}, 音视频类型: {}, 码流类型: {},存储器类型: {}, ", + log.info("[JT-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},报警标志: {}, 音视频类型: {}, 码流类型: {},存储器类型: {}, ", phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType); if (!ftpSetting.getEnable()) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务,无法下载录像"); @@ -403,7 +403,7 @@ public class JT1078Controller { @GetMapping("/ptz") public void ptz(String phoneNumber, Integer channelId, String command, int speed){ - log.info("[1078-云台控制] phoneNumber:{}, channelId:{}, command: {}, speed: {}", phoneNumber, channelId, command, speed); + log.info("[JT-云台控制] phoneNumber:{}, channelId:{}, command: {}, speed: {}", phoneNumber, channelId, command, speed); service.ptzControl(phoneNumber, channelId, command, speed); } @@ -414,7 +414,7 @@ public class JT1078Controller { @GetMapping("/fill-light") public void fillLight(String phoneNumber, Integer channelId, String command){ - log.info("[1078-补光灯开关] phoneNumber:{}, channelId:{}, command: {}", phoneNumber, channelId, command); + log.info("[JT-补光灯开关] phoneNumber:{}, channelId:{}, command: {}", phoneNumber, channelId, command); service.supplementaryLight(phoneNumber, channelId, command); } @@ -425,7 +425,7 @@ public class JT1078Controller { @GetMapping("/wiper") public void wiper(String phoneNumber, Integer channelId, String command){ - log.info("[1078-雨刷开关] phoneNumber:{}, channelId:{}, command: {}", phoneNumber, channelId, command); + log.info("[JT-雨刷开关] phoneNumber:{}, channelId:{}, command: {}", phoneNumber, channelId, command); service.wiper(phoneNumber, channelId, command); } @@ -434,7 +434,7 @@ public class JT1078Controller { @GetMapping("/config") public JTDeviceConfig config(String phoneNumber, String[] params){ - log.info("[1078-查询终端参数] phoneNumber:{}", phoneNumber); + log.info("[JT-查询终端参数] phoneNumber:{}", phoneNumber); return service.queryConfig(phoneNumber, params, null); } @@ -444,7 +444,7 @@ public class JT1078Controller { @PostMapping("/set-config") public void setConfig(@RequestBody SetConfigParam config){ - log.info("[1078-设置终端参数] 参数: {}", config.toString()); + log.info("[JT-设置终端参数] 参数: {}", config.toString()); service.setConfig(config.getPhoneNumber(), config.getConfig()); } @@ -453,7 +453,7 @@ public class JT1078Controller { @PostMapping("/control/connection") public void connectionControl(@RequestBody ConnectionControlParam control){ - log.info("[1078-终端控制] 参数: {}", control.toString()); + log.info("[JT-终端控制] 参数: {}", control.toString()); service.connectionControl(control.getPhoneNumber(), control.getControl()); } @@ -462,7 +462,7 @@ public class JT1078Controller { @PostMapping("/control/reset") public void resetControl(String phoneNumber){ - log.info("[1078-复位] phoneNumber: {}", phoneNumber); + log.info("[JT-复位] phoneNumber: {}", phoneNumber); service.resetControl(phoneNumber); } @@ -471,7 +471,7 @@ public class JT1078Controller { @PostMapping("/control/factory-reset") public void factoryResetControl(String phoneNumber){ - log.info("[1078-恢复出厂设置] phoneNumber: {}", phoneNumber); + log.info("[JT-恢复出厂设置] phoneNumber: {}", phoneNumber); service.factoryResetControl(phoneNumber); } @@ -480,7 +480,7 @@ public class JT1078Controller { @GetMapping("/attribute") public JTDeviceAttribute attribute(String phoneNumber){ - log.info("[1078-查询终端属性] phoneNumber: {}", phoneNumber); + log.info("[JT-查询终端属性] phoneNumber: {}", phoneNumber); return service.attribute(phoneNumber); } @@ -489,7 +489,7 @@ public class JT1078Controller { @GetMapping("/position-info") public JTPositionBaseInfo queryPositionInfo(String phoneNumber){ - log.info("[1078-查询位置信息] phoneNumber: {}", phoneNumber); + log.info("[JT-查询位置信息] phoneNumber: {}", phoneNumber); return service.queryPositionInfo(phoneNumber); } @@ -500,7 +500,7 @@ public class JT1078Controller { @GetMapping("/control/temp-position-tracking") public void tempPositionTrackingControl(String phoneNumber, Integer timeInterval, Long validityPeriod){ - log.info("[1078-临时位置跟踪控制] phoneNumber: {}, 时间间隔 {}秒, 位置跟踪有效期 {}秒", phoneNumber, timeInterval, validityPeriod); + log.info("[JT-临时位置跟踪控制] phoneNumber: {}, 时间间隔 {}秒, 位置跟踪有效期 {}秒", phoneNumber, timeInterval, validityPeriod); service.tempPositionTrackingControl(phoneNumber, timeInterval, validityPeriod); } @@ -511,7 +511,7 @@ public class JT1078Controller { @PostMapping("/confirmation-alarm-message") public void confirmationAlarmMessage(@RequestBody ConfirmationAlarmMessageParam param){ - log.info("[1078-人工确认报警消息] 参数: {}", param); + log.info("[JT-人工确认报警消息] 参数: {}", param); service.confirmationAlarmMessage(param.getPhoneNumber(), param.getAlarmPackageNo(), param.getAlarmMessageType()); } @@ -520,7 +520,7 @@ public class JT1078Controller { @GetMapping("/link-detection") public WVPResult linkDetection(String phoneNumber){ - log.info("[1078-链路检测] phoneNumber: {}", phoneNumber); + log.info("[JT-链路检测] phoneNumber: {}", phoneNumber); int result = service.linkDetection(phoneNumber); if (result == 0) { return WVPResult.success(result); @@ -536,7 +536,7 @@ public class JT1078Controller { @PostMapping("/text-msg") public WVPResult textMessage(@RequestBody TextMessageParam textMessageParam){ - log.info("[1078-文本信息下发] textMessageParam: {}", textMessageParam); + log.info("[JT-文本信息下发] textMessageParam: {}", textMessageParam); int result = service.textMessage(textMessageParam.getPhoneNumber(), textMessageParam.getSign(), textMessageParam.getTextType(), textMessageParam.getContent()); if (result == 0) { return WVPResult.success(result); @@ -554,7 +554,7 @@ public class JT1078Controller { @GetMapping("/telephone-callback") public WVPResult telephoneCallback(String phoneNumber, Integer sign, String destPhoneNumber){ - log.info("[1078-电话回拨] phoneNumber: {}, sign: {}, phoneNumber: {},", phoneNumber, sign, phoneNumber); + log.info("[JT-电话回拨] phoneNumber: {}, sign: {}, phoneNumber: {},", phoneNumber, sign, phoneNumber); int result = service.telephoneCallback(phoneNumber, sign, destPhoneNumber); if (result == 0) { return WVPResult.success(result); @@ -570,7 +570,7 @@ public class JT1078Controller { @PostMapping("/set-phone-book") public WVPResult setPhoneBook(@RequestBody SetPhoneBookParam setPhoneBookParam){ - log.info("[1078-设置电话本] setPhoneBookParam: {}", setPhoneBookParam); + log.info("[JT-设置电话本] setPhoneBookParam: {}", setPhoneBookParam); int result = service.setPhoneBook(setPhoneBookParam.getPhoneNumber(), setPhoneBookParam.getType(), setPhoneBookParam.getPhoneBookContactList()); if (result == 0) { return WVPResult.success(result); @@ -587,7 +587,7 @@ public class JT1078Controller { @GetMapping("/control/door") public WVPResult controlDoor(String phoneNumber, Boolean open){ - log.info("[1078-车门控制] phoneNumber: {}, open: {},", phoneNumber, open); + log.info("[JT-车门控制] phoneNumber: {}, open: {},", phoneNumber, open); JTPositionBaseInfo positionBaseInfo = service.controlDoor(phoneNumber, open); if (open == !positionBaseInfo.getStatus().isDoorLocking()) { @@ -602,7 +602,7 @@ public class JT1078Controller { @PostMapping("/area/circle/update") public WVPResult updateAreaForCircle(@RequestBody SetAreaParam areaParam){ - log.info("[1078-更新圆形区域] areaParam: {},", areaParam); + log.info("[JT-更新圆形区域] areaParam: {},", areaParam); int result = service.setAreaForCircle(0, areaParam.getPhoneNumber(), areaParam.getCircleAreaList()); if (result == 0) { return WVPResult.success(result); @@ -618,7 +618,7 @@ public class JT1078Controller { @PostMapping("/area/circle/add") public WVPResult addAreaForCircle(@RequestBody SetAreaParam areaParam){ - log.info("[1078-追加圆形区域] areaParam: {},", areaParam); + log.info("[JT-追加圆形区域] areaParam: {},", areaParam); int result = service.setAreaForCircle(1, areaParam.getPhoneNumber(), areaParam.getCircleAreaList()); if (result == 0) { return WVPResult.success(result); @@ -634,7 +634,7 @@ public class JT1078Controller { @PostMapping("/area/circle/edit") public WVPResult editAreaForCircle(@RequestBody SetAreaParam areaParam){ - log.info("[1078-修改圆形区域] areaParam: {},", areaParam); + log.info("[JT-修改圆形区域] areaParam: {},", areaParam); int result = service.setAreaForCircle(2, areaParam.getPhoneNumber(), areaParam.getCircleAreaList()); if (result == 0) { return WVPResult.success(result); @@ -651,7 +651,7 @@ public class JT1078Controller { @GetMapping("/area/circle/delete") public WVPResult deleteAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-删除圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-删除圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); int result = service.deleteAreaForCircle(phoneNumber, ids); if (result == 0) { return WVPResult.success(result); @@ -667,7 +667,7 @@ public class JT1078Controller { @GetMapping("/area/circle/query") public WVPResult> queryAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-查询圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-查询圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); List result = service.queryAreaForCircle(phoneNumber, ids); if (result != null) { return WVPResult.success(result); @@ -682,7 +682,7 @@ public class JT1078Controller { @PostMapping("/area/rectangle/update") public WVPResult updateAreaForRectangle(@RequestBody SetAreaParam areaParam){ - log.info("[1078-更新矩形区域] areaParam: {},", areaParam); + log.info("[JT-更新矩形区域] areaParam: {},", areaParam); int result = service.setAreaForRectangle(0, areaParam.getPhoneNumber(), areaParam.getRectangleAreas()); if (result == 0) { return WVPResult.success(result); @@ -698,7 +698,7 @@ public class JT1078Controller { @PostMapping("/area/rectangle/add") public WVPResult addAreaForRectangle(@RequestBody SetAreaParam areaParam){ - log.info("[1078-追加矩形区域] areaParam: {},", areaParam); + log.info("[JT-追加矩形区域] areaParam: {},", areaParam); int result = service.setAreaForRectangle(1, areaParam.getPhoneNumber(), areaParam.getRectangleAreas()); if (result == 0) { return WVPResult.success(result); @@ -714,7 +714,7 @@ public class JT1078Controller { @PostMapping("/area/rectangle/edit") public WVPResult editAreaForRectangle(@RequestBody SetAreaParam areaParam){ - log.info("[1078-修改矩形区域] areaParam: {},", areaParam); + log.info("[JT-修改矩形区域] areaParam: {},", areaParam); int result = service.setAreaForRectangle(2, areaParam.getPhoneNumber(), areaParam.getRectangleAreas()); if (result == 0) { return WVPResult.success(result); @@ -731,7 +731,7 @@ public class JT1078Controller { @GetMapping("/area/rectangle/delete") public WVPResult deleteAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-删除矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-删除矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); int result = service.deleteAreaForRectangle(phoneNumber, ids); if (result == 0) { return WVPResult.success(result); @@ -747,7 +747,7 @@ public class JT1078Controller { @GetMapping("/area/rectangle/query") public WVPResult> queryAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-查询矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-查询矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); List result = service.queryAreaForRectangle(phoneNumber, ids); if (result != null) { return WVPResult.success(result); @@ -761,7 +761,7 @@ public class JT1078Controller { @PostMapping("/area/polygon/set") public WVPResult setAreaForPolygon(@RequestBody SetAreaParam areaParam){ - log.info("[1078-设置多边形区域] areaParam: {},", areaParam); + log.info("[JT-设置多边形区域] areaParam: {},", areaParam); int result = service.setAreaForPolygon(areaParam.getPhoneNumber(), areaParam.getPolygonArea()); if (result == 0) { return WVPResult.success(result); @@ -778,7 +778,7 @@ public class JT1078Controller { @GetMapping("/area/polygon/delete") public WVPResult deleteAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-删除多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-删除多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); int result = service.deleteAreaForPolygon(phoneNumber, ids); if (result == 0) { return WVPResult.success(result); @@ -794,7 +794,7 @@ public class JT1078Controller { @GetMapping("/area/polygon/query") public WVPResult> queryAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-查询多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-查询多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); List result = service.queryAreaForPolygon(phoneNumber, ids); if (result != null) { return WVPResult.success(result); @@ -808,7 +808,7 @@ public class JT1078Controller { @PostMapping("/route/set") public WVPResult setRoute(@RequestBody SetAreaParam areaParam){ - log.info("[1078-设置路线] areaParam: {},", areaParam); + log.info("[JT-设置路线] areaParam: {},", areaParam); int result = service.setRoute(areaParam.getPhoneNumber(), areaParam.getRoute()); if (result == 0) { return WVPResult.success(result); @@ -825,7 +825,7 @@ public class JT1078Controller { @GetMapping("/route/delete") public WVPResult deleteRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-删除路线] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-删除路线] phoneNumber: {}, ids:{}", phoneNumber, ids); int result = service.deleteRoute(phoneNumber, ids); if (result == 0) { return WVPResult.success(result); @@ -841,7 +841,7 @@ public class JT1078Controller { @GetMapping("/route/query") public WVPResult> queryRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List ids){ - log.info("[1078-查询路线] phoneNumber: {}, ids:{}", phoneNumber, ids); + log.info("[JT-查询路线] phoneNumber: {}, ids:{}", phoneNumber, ids); List result = service.queryRoute(phoneNumber, ids); if (result != null) { return WVPResult.success(result); @@ -857,7 +857,7 @@ public class JT1078Controller { @GetMapping("/driver-information") public WVPResult queryDriverInformation(String phoneNumber){ - log.info("[1078-上报驾驶员身份信息请求] phoneNumber: {}", phoneNumber); + log.info("[JT-上报驾驶员身份信息请求] phoneNumber: {}", phoneNumber); JTDriverInformation jtDriverInformation = service.queryDriverInformation(phoneNumber); if (jtDriverInformation != null) { return WVPResult.success(jtDriverInformation); @@ -871,7 +871,7 @@ public class JT1078Controller { @PostMapping("/shooting") public WVPResult> shooting(@RequestBody ShootingParam param){ - log.info("[1078-摄像头立即拍摄命令] param: {}", param ); + log.info("[JT-摄像头立即拍摄命令] param: {}", param ); List ids = service.shooting(param.getPhoneNumber(), param.getShootingCommand()); if (ids != null) { return WVPResult.success(ids); @@ -885,7 +885,7 @@ public class JT1078Controller { @PostMapping("/media-data-info") public WVPResult> queryMediaData(@RequestBody QueryMediaDataParam param){ - log.info("[1078-存储多媒体数据检索] param: {}", param ); + log.info("[JT-存储多媒体数据检索] param: {}", param ); List ids = service.queryMediaData(param.getPhoneNumber(), param.getQueryMediaDataCommand()); if (ids != null) { return WVPResult.success(ids); @@ -899,12 +899,12 @@ public class JT1078Controller { @PostMapping("/media-data-upload") public DeferredResult>> updateMediaData(@RequestBody QueryMediaDataParam param){ - log.info("[1078-存储多媒体数据上传命令] param: {}", param ); + log.info("[JT-存储多媒体数据上传命令] param: {}", param ); DeferredResult>> deferredResult = new DeferredResult<>(30000L); List resultList = new ArrayList<>(); deferredResult.onTimeout(()->{ - log.info("[1078-存储多媒体数据上传命令超时] param: {}", param ); + log.info("[JT-存储多媒体数据上传命令超时] param: {}", param ); WVPResult> fail = WVPResult.fail(ErrorCode.ERROR100); fail.setMsg("超时"); fail.setData(resultList); @@ -945,7 +945,7 @@ public class JT1078Controller { try { monitor.start(); } catch (Exception e) { - log.info("[1078-存储多媒体数据上传命令监听文件失败] param: {}", param ); + log.info("[JT-存储多媒体数据上传命令监听文件失败] param: {}", param ); deferredResult.setResult(null); return deferredResult; } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/Header.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/Header.java index 0281d2ff7..fdf8080ef 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/Header.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/Header.java @@ -1,12 +1,14 @@ package com.genersoft.iot.vmp.jt1078.proc; import com.genersoft.iot.vmp.jt1078.util.Bin; +import lombok.Data; /** * @author QingtaiJiang * @date 2023/4/27 18:22 * @email qingtaij@163.com */ +@Data public class Header { // 消息ID String msgId; @@ -24,46 +26,6 @@ public class Header { Short version = -1; - public String getMsgId() { - return msgId; - } - - public void setMsgId(String msgId) { - this.msgId = msgId; - } - - public Integer getMsgPro() { - return msgPro; - } - - public void setMsgPro(Integer msgPro) { - this.msgPro = msgPro; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public Integer getSn() { - return sn; - } - - public void setSn(Integer sn) { - this.sn = sn; - } - - public Short getVersion() { - return version; - } - - public void setVersion(Short version) { - this.version = version; - } - /** * 判断是否是2019的版本 * diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java index 86daa4c17..392c2da11 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java @@ -172,6 +172,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { if (channel == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "通道不存在"); } + + String app = "1078"; + String stream = phoneNumber + "_" + channelId; // 检查流是否已经存在,存在则返回 String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAY + phoneNumber + ":" + channelId; List>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playKey, k -> new ArrayList<>()); @@ -181,9 +184,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { MediaServer mediaServer = streamInfo.getMediaServer(); if (mediaServer != null) { // 查询流是否存在,不存在则删除缓存数据 - MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, "rtp", streamInfo.getStream()); + MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, app, streamInfo.getStream()); if (mediaInfo != null) { - log.info("[1078-点播] 点播已经存在,直接返回, phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-点播] 点播已经存在,直接返回, phoneNumber: {}, channelId: {}", phoneNumber, channelId); for (CommonCallback> errorCallback : errorCallbacks) { errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo)); } @@ -193,7 +196,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { // 清理数据 redisTemplate.delete(playKey); } - String stream = "jt_" + phoneNumber + "_" + channelId; + MediaServer mediaServer = mediaServerService.getMediaServerForMinimumLoad(null); if (mediaServer == null) { for (CommonCallback> errorCallback : errorCallbacks) { @@ -202,10 +205,10 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { return; } // 设置hook监听 - Hook hook = Hook.getInstance(HookType.on_media_arrival, "rtp", stream, mediaServer.getId()); + Hook hook = Hook.getInstance(HookType.on_media_arrival, app, stream, mediaServer.getId()); subscribe.addSubscribe(hook, (hookData) -> { dynamicTask.stop(playKey); - log.info("[1078-点播] 点播成功, 手机号: {}, 通道: {}", phoneNumber, channelId); + log.info("[JT-点播] 点播成功, 手机号: {}, 通道: {}", phoneNumber, channelId); // TODO 发送9105 实时音视频传输状态通知, 通知丢包率 StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId); @@ -222,26 +225,30 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { String fileName = phoneNumber + "_" + channelId + ".jpg"; // 请求截图 log.info("[请求截图]: " + fileName); - mediaServerService.getSnap(mediaServer, "rtp", stream, 15, 1, path, fileName); + mediaServerService.getSnap(mediaServer, app, stream, 15, 1, path, fileName); }); // 开启收流端口 - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServer, stream, "000", false, false, 0, false, !channel.isHasAudio(), false, 1); + SSRCInfo ssrcInfo = mediaServerService.openJTTServer(mediaServer, stream, null, false, !channel.isHasAudio(), 1); if (ssrcInfo == null) { stopPlay(phoneNumber, channelId); return; } + + + // 设置超时监听 dynamicTask.startDelay(playKey, () -> { - log.info("[1078-点播] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-点播] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId); for (CommonCallback> errorCallback : errorCallbacks) { errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getCode(), InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getMsg(), null)); } - mediaServerService.closeRTPServer(mediaServer, stream); + mediaServerService.closeJTTServer(mediaServer, stream, null); subscribe.removeSubscribe(hook); + stopPlay(phoneNumber, channelId); }, userSetting.getPlayTimeout()); - log.info("[1078-点播] phoneNumber: {}, channelId: {},IP: {}, 端口: {}", phoneNumber, channelId, mediaServer.getSdpIp(), ssrcInfo.getPort()); + log.info("[JT-点播] phoneNumber: {}, channelId: {},IP: {}, 端口: {}", phoneNumber, channelId, mediaServer.getSdpIp(), ssrcInfo.getPort()); J9101 j9101 = new J9101(); j9101.setChannel(channelId); j9101.setIp(mediaServer.getSdpIp()); @@ -253,7 +260,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { } public StreamInfo onPublishHandler(MediaServer mediaServerItem, HookData hookData, String phoneNumber, Integer channelId) { - StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(mediaServerItem, "rtp", hookData.getStream(), hookData.getMediaInfo(), null); + StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(mediaServerItem, "1078", hookData.getStream(), hookData.getMediaInfo(), null); streamInfo.setDeviceId(phoneNumber); streamInfo.setChannelId(channelId); return streamInfo; @@ -279,11 +286,11 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { j9102.setCloseType(0); j9102.setStreamType(1); jt1078Template.stopLive(phoneNumber, j9102, 6); - log.info("[1078-停止点播] phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-停止点播] phoneNumber: {}, channelId: {}", phoneNumber, channelId); // 删除缓存数据 if (streamInfo != null) { // 关闭rtpServer - mediaServerService.closeRTPServer(streamInfo.getMediaServer(), streamInfo.getStream()); + mediaServerService.closeJTTServer(streamInfo.getMediaServer(), streamInfo.getStream(), null); redisTemplate.delete(playKey); } @@ -295,9 +302,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { dynamicTask.stop(playKey); StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey); if (streamInfo == null) { - log.info("[1078-暂停点播] 未找到点播信息 phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-暂停点播] 未找到点播信息 phoneNumber: {}, channelId: {}", phoneNumber, channelId); } - log.info("[1078-暂停点播] phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-暂停点播] phoneNumber: {}, channelId: {}", phoneNumber, channelId); // 发送暂停命令 J9102 j9102 = new J9102(); j9102.setChannel(Integer.valueOf(channelId)); @@ -313,9 +320,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { dynamicTask.stop(playKey); StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey); if (streamInfo == null) { - log.info("[1078-继续点播] 未找到点播信息 phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-继续点播] 未找到点播信息 phoneNumber: {}, channelId: {}", phoneNumber, channelId); } - log.info("[1078-继续点播] phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-继续点播] phoneNumber: {}, channelId: {}", phoneNumber, channelId); // 发送暂停命令 J9102 j9102 = new J9102(); j9102.setChannel(Integer.valueOf(channelId)); @@ -327,7 +334,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { @Override public List getRecordList(String phoneNumber, Integer channelId, String startTime, String endTime) { - log.info("[1078-查询录像列表] phoneNumber: {}, channelId: {}, startTime: {}, endTime: {}" + log.info("[JT-查询录像列表] phoneNumber: {}, channelId: {}, startTime: {}, endTime: {}" , phoneNumber, channelId, startTime, endTime); // 发送请求录像列表命令 J9205 j9205 = new J9205(); @@ -341,7 +348,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { if (JRecordItemList == null || JRecordItemList.isEmpty()) { return null; } - log.info("[1078-查询录像列表] phoneNumber: {}, channelId: {}, startTime: {}, endTime: {}, 结果: {}条" + log.info("[JT-查询录像列表] phoneNumber: {}, channelId: {}, startTime: {}, endTime: {}, 结果: {}条" , phoneNumber, channelId, startTime, endTime, JRecordItemList.size()); return JRecordItemList; } @@ -349,7 +356,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { @Override public void playback(String phoneNumber, Integer channelId, String startTime, String endTime, Integer type, Integer rate, Integer playbackType, Integer playbackSpeed, CommonCallback> callback) { - log.info("[1078-回放] 回放,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {}, 音视频类型: {}, 码流类型: {}, " + + log.info("[JT-回放] 回放,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {}, 音视频类型: {}, 码流类型: {}, " + "回放方式: {}, 快进或快退倍数: {}", phoneNumber, channelId, startTime, endTime, type, rate, playbackType, playbackSpeed); // 检查流是否已经存在,存在则返回 String playbackKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + phoneNumber + ":" + channelId; @@ -361,9 +368,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { MediaServer mediaServer = streamInfo.getMediaServer(); if (mediaServer != null) { // 查询流是否存在,不存在则删除缓存数据 - MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, "rtp", streamInfo.getStream()); + MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, "1078", streamInfo.getStream()); if (mediaInfo != null) { - log.info("[1078-回放] 回放已经存在,直接返回, logInfo: {}", logInfo); + log.info("[JT-回放] 回放已经存在,直接返回, logInfo: {}", logInfo); for (CommonCallback> errorCallback : errorCallbacks) { errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo)); } @@ -384,10 +391,10 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { return; } // 设置hook监听 - Hook hookSubscribe = Hook.getInstance(HookType.on_media_arrival, "rtp", stream, mediaServer.getId()); + Hook hookSubscribe = Hook.getInstance(HookType.on_media_arrival, "1078", stream, mediaServer.getId()); subscribe.addSubscribe(hookSubscribe, (hookData) -> { dynamicTask.stop(playbackKey); - log.info("[1078-回放] 回放成功, logInfo: {}", logInfo); + log.info("[JT-回放] 回放成功, logInfo: {}", logInfo); StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId); for (CommonCallback> errorCallback : errorCallbacks) { @@ -401,7 +408,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { }); // 设置超时监听 dynamicTask.startDelay(playbackKey, () -> { - log.info("[1078-回放] 回放超时, logInfo: {}", logInfo); + log.info("[JT-回放] 回放超时, logInfo: {}", logInfo); for (CommonCallback> errorCallback : errorCallbacks) { errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode(), InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getMsg(), null)); @@ -410,8 +417,8 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { }, userSetting.getPlayTimeout()); // 开启收流端口 - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServer, stream, null, false, false, 0, false, false, false, 1); - log.info("[1078-回放] logInfo: {}, 端口: {}", logInfo, ssrcInfo.getPort()); + SSRCInfo ssrcInfo = mediaServerService.openJTTServer(mediaServer, stream, null, false, false, 1); + log.info("[JT-回放] logInfo: {}, 端口: {}", logInfo, ssrcInfo.getPort()); J9201 j9201 = new J9201(); j9201.setChannel(channelId); j9201.setIp(mediaServer.getSdpIp()); @@ -436,7 +443,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { @Override public void playbackControl(String phoneNumber, Integer channelId, Integer command, Integer playbackSpeed, String time) { - log.info("[1078-回放控制] phoneNumber: {}, channelId: {}, command: {}, playbackSpeed: {}, time: {}", + log.info("[JT-回放控制] phoneNumber: {}, channelId: {}, command: {}, playbackSpeed: {}, time: {}", phoneNumber, channelId, command, playbackSpeed, time); String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + phoneNumber + ":" + channelId; dynamicTask.stop(playKey); @@ -446,7 +453,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { // 删除缓存数据 if (streamInfo != null) { // 关闭rtpServer - mediaServerService.closeRTPServer(streamInfo.getMediaServer(), streamInfo.getStream()); + mediaServerService.closeJTTServer(streamInfo.getMediaServer(), streamInfo.getStream(), null); } // 清理回调 List>> generalCallbacks = inviteErrorCallbackMap.get(playKey); @@ -555,10 +562,10 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { } if (onlySend == null || !onlySend) { // 设置hook监听 - Hook hook = Hook.getInstance(HookType.on_media_arrival, "rtp", receiveStream, mediaServer.getId()); + Hook hook = Hook.getInstance(HookType.on_media_arrival, "1078", receiveStream, mediaServer.getId()); subscribe.addSubscribe(hook, (hookData) -> { dynamicTask.stop(playKey); - log.info("[1078-对讲] 对讲成功, phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-对讲] 对讲成功, phoneNumber: {}, channelId: {}", phoneNumber, channelId); StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId); for (CommonCallback> errorCallback : errorCallbacks) { @@ -569,14 +576,14 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { // 存储发流信息 sendRtpServerService.update(sendRtpInfo); }); - Hook hookForDeparture = Hook.getInstance(HookType.on_media_departure, "rtp", receiveStream, mediaServer.getId()); + Hook hookForDeparture = Hook.getInstance(HookType.on_media_departure, "1078", receiveStream, mediaServer.getId()); subscribe.addSubscribe(hookForDeparture, (hookData) -> { - log.info("[1078-对讲] 对讲时源流注销, app: {}. stream: {}, phoneNumber: {}, channelId: {}", app, stream, phoneNumber, channelId); + log.info("[JT-对讲] 对讲时源流注销, app: {}. stream: {}, phoneNumber: {}, channelId: {}", app, stream, phoneNumber, channelId); stopTalk(phoneNumber, channelId); }); // 设置超时监听 dynamicTask.startDelay(playKey, () -> { - log.info("[1078-对讲] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-对讲] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId); for (CommonCallback> errorCallback : errorCallbacks) { errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode(), InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getMsg(), null)); @@ -585,7 +592,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { }, userSetting.getPlayTimeout()); } - log.info("[1078-对讲] phoneNumber: {}, channelId: {}, 收发端口: {}, app: {}, stream: {}", + log.info("[JT-对讲] phoneNumber: {}, channelId: {}, 收发端口: {}, app: {}, stream: {}", phoneNumber, channelId, sendRtpInfo.getLocalPort(), app, stream); J9101 j9101 = new J9101(); j9101.setChannel(Integer.valueOf(channelId)); @@ -596,7 +603,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { j9101.setType(2); jt1078Template.startLive(phoneNumber, j9101, 6); if (onlySend != null && onlySend) { - log.info("[1078-对讲] 对讲成功, phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-对讲] 对讲成功, phoneNumber: {}, channelId: {}", phoneNumber, channelId); for (CommonCallback> errorCallback : errorCallbacks) { errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), null)); } @@ -617,12 +624,12 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { j9102.setCloseType(0); j9102.setStreamType(1); jt1078Template.stopLive(phoneNumber, j9102, 6); - log.info("[1078-停止对讲] phoneNumber: {}, channelId: {}", phoneNumber, channelId); + log.info("[JT-停止对讲] phoneNumber: {}, channelId: {}", phoneNumber, channelId); // 删除缓存数据 if (streamInfo != null) { redisTemplate.delete(playKey); // 关闭rtpServer - mediaServerService.closeRTPServer(streamInfo.getMediaServer(), streamInfo.getStream()); + mediaServerService.closeJTTServer(streamInfo.getMediaServer(), streamInfo.getStream(), null); } // 清理回调 List>> generalCallbacks = inviteErrorCallbackMap.get(playKey); diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java index bcbe6ed51..a6847dc71 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java @@ -174,7 +174,7 @@ public class jt1078ServiceImpl implements Ijt1078Service { dynamicTask.startDelay(filePath, ()->{ fileUploadMap.remove(filePath); }, 2*60*60*1000); - log.info("[1078-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},等待上传文件路径: {} ", + log.info("[JT-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},等待上传文件路径: {} ", phoneNumber, channelId, startTime, endTime, filePath); // 发送停止命令 J9206 j92026 = new J9206(); @@ -575,9 +575,9 @@ public class jt1078ServiceImpl implements Ijt1078Service { dynamicTask.stop(playKey); StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey); if (streamInfo == null) { - log.info("[1078-切换码流类型] 未找到点播信息 phoneNumber: {}, channelId: {}, streamType: {}", phoneNumber, channelId, streamType); + log.info("[JT-切换码流类型] 未找到点播信息 phoneNumber: {}, channelId: {}, streamType: {}", phoneNumber, channelId, streamType); } - log.info("[1078-切换码流类型] phoneNumber: {}, channelId: {}, streamType: {}", phoneNumber, channelId, streamType); + log.info("[JT-切换码流类型] phoneNumber: {}, channelId: {}, streamType: {}", phoneNumber, channelId, streamType); // 发送暂停命令 J9102 j9102 = new J9102(); j9102.setChannel(Integer.valueOf(channelId)); diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java index e53b88e20..6ec567b77 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java @@ -61,12 +61,7 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService { @Override public int createRTPServer(MediaServer mediaServer, String stream, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { Boolean recordSip = userSetting.getRecordSip(); - return ablresTfulUtils.openRtpServer(mediaServer, "rtp", stream, 96, port, tcpMode, disableAudio?1:0, recordSip); - } - - @Override - public void closeRtpServer(MediaServer mediaServer, String streamId) { - closeRtpServer(mediaServer, streamId, null); + return ablresTfulUtils.openRtpServer(mediaServer, "rtp", stream, 96, port, tcpMode, disableAudio?1:0, recordSip, false); } @Override @@ -89,6 +84,17 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService { } } + @Override + public int createJTTServer(MediaServer mediaServer, String stream, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) { + Boolean recordSip = userSetting.getRecordSip(); + return ablresTfulUtils.openRtpServer(mediaServer, "1078", stream, 96, port, tcpMode, disableAudio?1:0, recordSip, true); + } + + @Override + public void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback callback) { + closeRtpServer(mediaServer, streamId, callback); + } + @Override public void closeStreams(MediaServer mediaServer, String app, String streamId) { Map param = new HashMap<>(); diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java index c2978090f..66e48b82f 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java @@ -231,6 +231,9 @@ public class ABLMediaServerStatusManger { if (mediaServerItem.getRtpProxyPort() != ablServerConfig.getPsTsRecvPort()) { mediaServerItem.setRtpProxyPort(ablServerConfig.getPsTsRecvPort()); } + if (mediaServerItem.getRtpProxyPort() != ablServerConfig.getJtt1078RecvPort()) { + mediaServerItem.setJttProxyPort(ablServerConfig.getJtt1078RecvPort()); + } // if (mediaServerItem.getRtspSSLPort() == 0) { // mediaServerItem.setRtspSSLPort(ablServerConfig.getRtspSSlport()); // } diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java index 3a136fef1..5e720c1d9 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java @@ -312,18 +312,24 @@ public class ABLRESTfulUtils { } } - - - public Integer openRtpServer(MediaServer mediaServer, String app, String stream, int payload, Integer port, Integer tcpMode, Integer disableAudio, Boolean record) { + public Integer openRtpServer(MediaServer mediaServer, String app, String stream, int payload, Integer port, Integer tcpMode, Integer disableAudio, Boolean record, Boolean isJtt) { Map param = new HashMap<>(); param.put("vhost", "_defaultVhost_"); param.put("app", app); param.put("stream_id", stream); param.put("payload", payload); - param.put("jtt1078_version", "2016"); - param.put("RtpPayloadDataType", 4); + if (isJtt) { + // 1 PS 国标gb28181, 默认为1、 + // 2 ES 视频支持 H246\H265,音频只支持G711A、G711U 、AAC + // 3 XHB (一家公司的打包格式) 只支持视频,音频不能加入打包 + // 4 、Jt1078(2016版本)码流接入 + param.put("RtpPayloadDataType", 4); + param.put("jtt1078_version", "2016"); + } if (port != null) { param.put("port", port); + }else { + param.put("port", 0); } if (tcpMode != null) { param.put("enable_tcp", tcpMode); diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/bean/AblServerConfig.java b/src/main/java/com/genersoft/iot/vmp/media/abl/bean/AblServerConfig.java index dc0edecda..50ac140a5 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/bean/AblServerConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/bean/AblServerConfig.java @@ -2,11 +2,13 @@ package com.genersoft.iot.vmp.media.abl.bean; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import lombok.Data; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; +@Data public class AblServerConfig { @ConfigKeyId("secret") @@ -51,6 +53,9 @@ public class AblServerConfig { @ConfigKeyId("ps_tsRecvPort") private Integer psTsRecvPort; + @ConfigKeyId("1078Port") + private Integer jtt1078RecvPort; + @ConfigKeyId("hlsCutType") private Integer hlsCutType; @@ -249,564 +254,4 @@ public class AblServerConfig { } return ablServerConfig; } - - public String getSecret() { - return secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public String getServerIp() { - return serverIp; - } - - public void setServerIp(String serverIp) { - this.serverIp = serverIp; - } - - public String getMediaServerId() { - return mediaServerId; - } - - public void setMediaServerId(String mediaServerId) { - this.mediaServerId = mediaServerId; - } - - public Integer getHookEnable() { - return hookEnable; - } - - public void setHookEnable(Integer hookEnable) { - this.hookEnable = hookEnable; - } - - public Integer getEnableAudio() { - return enableAudio; - } - - public void setEnableAudio(Integer enableAudio) { - this.enableAudio = enableAudio; - } - - public Integer getHttpServerPort() { - return httpServerPort; - } - - public void setHttpServerPort(Integer httpServerPort) { - this.httpServerPort = httpServerPort; - } - - public Integer getRtspPort() { - return rtspPort; - } - - public void setRtspPort(Integer rtspPort) { - this.rtspPort = rtspPort; - } - - public Integer getRtmpPort() { - return rtmpPort; - } - - public void setRtmpPort(Integer rtmpPort) { - this.rtmpPort = rtmpPort; - } - - public Integer getHttpFlvPort() { - return httpFlvPort; - } - - public void setHttpFlvPort(Integer httpFlvPort) { - this.httpFlvPort = httpFlvPort; - } - - public Integer getHlsEnable() { - return hlsEnable; - } - - public void setHlsEnable(Integer hlsEnable) { - this.hlsEnable = hlsEnable; - } - - public Integer getHlsPort() { - return hlsPort; - } - - public void setHlsPort(Integer hlsPort) { - this.hlsPort = hlsPort; - } - - public Integer getWsPort() { - return wsPort; - } - - public void setWsPort(Integer wsPort) { - this.wsPort = wsPort; - } - - public Integer getMp4Port() { - return mp4Port; - } - - public void setMp4Port(Integer mp4Port) { - this.mp4Port = mp4Port; - } - - public Integer getPsTsRecvPort() { - return psTsRecvPort; - } - - public void setPsTsRecvPort(Integer psTsRecvPort) { - this.psTsRecvPort = psTsRecvPort; - } - - public Integer getHlsCutType() { - return hlsCutType; - } - - public void setHlsCutType(Integer hlsCutType) { - this.hlsCutType = hlsCutType; - } - - public Integer getH265CutType() { - return h265CutType; - } - - public void setH265CutType(Integer h265CutType) { - this.h265CutType = h265CutType; - } - - public Integer getRecvThreadCount() { - return RecvThreadCount; - } - - public void setRecvThreadCount(Integer recvThreadCount) { - RecvThreadCount = recvThreadCount; - } - - public Integer getSendThreadCount() { - return SendThreadCount; - } - - public void setSendThreadCount(Integer sendThreadCount) { - SendThreadCount = sendThreadCount; - } - - public Integer getGB28181RtpTCPHeadType() { - return GB28181RtpTCPHeadType; - } - - public void setGB28181RtpTCPHeadType(Integer GB28181RtpTCPHeadType) { - this.GB28181RtpTCPHeadType = GB28181RtpTCPHeadType; - } - - public Integer getReConnectingCount() { - return ReConnectingCount; - } - - public void setReConnectingCount(Integer reConnectingCount) { - ReConnectingCount = reConnectingCount; - } - - public Integer getMaxTimeNoOneWatch() { - return maxTimeNoOneWatch; - } - - public void setMaxTimeNoOneWatch(Integer maxTimeNoOneWatch) { - this.maxTimeNoOneWatch = maxTimeNoOneWatch; - } - - public Integer getPushEnableMp4() { - return pushEnableMp4; - } - - public void setPushEnableMp4(Integer pushEnableMp4) { - this.pushEnableMp4 = pushEnableMp4; - } - - public Integer getFileSecond() { - return fileSecond; - } - - public void setFileSecond(Integer fileSecond) { - this.fileSecond = fileSecond; - } - - public Integer getFileKeepMaxTime() { - return fileKeepMaxTime; - } - - public void setFileKeepMaxTime(Integer fileKeepMaxTime) { - this.fileKeepMaxTime = fileKeepMaxTime; - } - - public Integer getHttpDownloadSpeed() { - return httpDownloadSpeed; - } - - public void setHttpDownloadSpeed(Integer httpDownloadSpeed) { - this.httpDownloadSpeed = httpDownloadSpeed; - } - - public Integer getRecordReplayThread() { - return RecordReplayThread; - } - - public void setRecordReplayThread(Integer recordReplayThread) { - RecordReplayThread = recordReplayThread; - } - - public Integer getConvertMaxObject() { - return convertMaxObject; - } - - public void setConvertMaxObject(Integer convertMaxObject) { - this.convertMaxObject = convertMaxObject; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getRecordPath() { - return recordPath; - } - - public void setRecordPath(String recordPath) { - this.recordPath = recordPath; - } - - public String getPicturePath() { - return picturePath; - } - - public void setPicturePath(String picturePath) { - this.picturePath = picturePath; - } - - public Integer getNoneReaderDuration() { - return noneReaderDuration; - } - - public void setNoneReaderDuration(Integer noneReaderDuration) { - this.noneReaderDuration = noneReaderDuration; - } - - public String getOnServerStarted() { - return onServerStarted; - } - - public void setOnServerStarted(String onServerStarted) { - this.onServerStarted = onServerStarted; - } - - public String getOnServerKeepalive() { - return onServerKeepalive; - } - - public void setOnServerKeepalive(String onServerKeepalive) { - this.onServerKeepalive = onServerKeepalive; - } - - public String getOnPlay() { - return onPlay; - } - - public void setOnPlay(String onPlay) { - this.onPlay = onPlay; - } - - public String getOnPublish() { - return onPublish; - } - - public void setOnPublish(String onPublish) { - this.onPublish = onPublish; - } - - public String getOnStreamArrive() { - return onStreamArrive; - } - - public void setOnStreamArrive(String onStreamArrive) { - this.onStreamArrive = onStreamArrive; - } - - public String getOnStreamNotArrive() { - return onStreamNotArrive; - } - - public void setOnStreamNotArrive(String onStreamNotArrive) { - this.onStreamNotArrive = onStreamNotArrive; - } - - public String getOnStreamNoneReader() { - return onStreamNoneReader; - } - - public void setOnStreamNoneReader(String onStreamNoneReader) { - this.onStreamNoneReader = onStreamNoneReader; - } - - public String getOnStreamDisconnect() { - return onStreamDisconnect; - } - - public void setOnStreamDisconnect(String onStreamDisconnect) { - this.onStreamDisconnect = onStreamDisconnect; - } - - public String getOnDeleteRecordMp4() { - return onDeleteRecordMp4; - } - - public void setOnDeleteRecordMp4(String onDeleteRecordMp4) { - this.onDeleteRecordMp4 = onDeleteRecordMp4; - } - - public String getOnRecordProgress() { - return onRecordProgress; - } - - public void setOnRecordProgress(String onRecordProgress) { - this.onRecordProgress = onRecordProgress; - } - - public String getOnRecordTs() { - return onRecordTs; - } - - public void setOnRecordTs(String onRecordTs) { - this.onRecordTs = onRecordTs; - } - - public Integer getEnableGetFileDuration() { - return enableGetFileDuration; - } - - public void setEnableGetFileDuration(Integer enableGetFileDuration) { - this.enableGetFileDuration = enableGetFileDuration; - } - - public Integer getKeepaliveDuration() { - return keepaliveDuration; - } - - public void setKeepaliveDuration(Integer keepaliveDuration) { - this.keepaliveDuration = keepaliveDuration; - } - - public Integer getCaptureReplayType() { - return captureReplayType; - } - - public void setCaptureReplayType(Integer captureReplayType) { - this.captureReplayType = captureReplayType; - } - - public Integer getVideoFileFormat() { - return videoFileFormat; - } - - public void setVideoFileFormat(Integer videoFileFormat) { - this.videoFileFormat = videoFileFormat; - } - - public Integer getMaxDiconnectTimeoutSecond() { - return maxDiconnectTimeoutSecond; - } - - public void setMaxDiconnectTimeoutSecond(Integer maxDiconnectTimeoutSecond) { - this.maxDiconnectTimeoutSecond = maxDiconnectTimeoutSecond; - } - - public Integer getG711ConvertAAC() { - return g711ConvertAAC; - } - - public void setG711ConvertAAC(Integer g711ConvertAAC) { - this.g711ConvertAAC = g711ConvertAAC; - } - - public Integer getFilterVideoEnable() { - return filterVideoEnable; - } - - public void setFilterVideoEnable(Integer filterVideoEnable) { - this.filterVideoEnable = filterVideoEnable; - } - - public String getFilterVideoText() { - return filterVideoText; - } - - public void setFilterVideoText(String filterVideoText) { - this.filterVideoText = filterVideoText; - } - - public Integer getFilterFontSize() { - return filterFontSize; - } - - public void setFilterFontSize(Integer filterFontSize) { - this.filterFontSize = filterFontSize; - } - - public String getFilterFontColor() { - return filterFontColor; - } - - public void setFilterFontColor(String filterFontColor) { - this.filterFontColor = filterFontColor; - } - - public Integer getFilterFontLeft() { - return filterFontLeft; - } - - public void setFilterFontLeft(Integer filterFontLeft) { - this.filterFontLeft = filterFontLeft; - } - - public Integer getFilterFontTop() { - return filterFontTop; - } - - public void setFilterFontTop(Integer filterFontTop) { - this.filterFontTop = filterFontTop; - } - - public Double getFilterFontAlpha() { - return filterFontAlpha; - } - - public void setFilterFontAlpha(Double filterFontAlpha) { - this.filterFontAlpha = filterFontAlpha; - } - - public Integer getConvertOutWidth() { - return convertOutWidth; - } - - public void setConvertOutWidth(Integer convertOutWidth) { - this.convertOutWidth = convertOutWidth; - } - - public Integer getConvertOutHeight() { - return convertOutHeight; - } - - public void setConvertOutHeight(Integer convertOutHeight) { - this.convertOutHeight = convertOutHeight; - } - - public Integer getConvertOutBitrate() { - return convertOutBitrate; - } - - public void setConvertOutBitrate(Integer convertOutBitrate) { - this.convertOutBitrate = convertOutBitrate; - } - - public Integer getFlvPlayAddMute() { - return flvPlayAddMute; - } - - public void setFlvPlayAddMute(Integer flvPlayAddMute) { - this.flvPlayAddMute = flvPlayAddMute; - } - - public Integer getGb28181LibraryUse() { - return gb28181LibraryUse; - } - - public void setGb28181LibraryUse(Integer gb28181LibraryUse) { - this.gb28181LibraryUse = gb28181LibraryUse; - } - - public String getRtcListeningIp() { - return rtcListeningIp; - } - - public void setRtcListeningIp(String rtcListeningIp) { - this.rtcListeningIp = rtcListeningIp; - } - - public Integer getRtcListeningIpPort() { - return rtcListeningIpPort; - } - - public void setRtcListeningIpPort(Integer rtcListeningIpPort) { - this.rtcListeningIpPort = rtcListeningIpPort; - } - - public String getRtcExternalIp() { - return rtcExternalIp; - } - - public void setRtcExternalIp(String rtcExternalIp) { - this.rtcExternalIp = rtcExternalIp; - } - - public String getRtcRealm() { - return rtcRealm; - } - - public void setRtcRealm(String rtcRealm) { - this.rtcRealm = rtcRealm; - } - - public String getRtcUser() { - return rtcUser; - } - - public void setRtcUser(String rtcUser) { - this.rtcUser = rtcUser; - } - - public Integer getRtcMinPort() { - return rtcMinPort; - } - - public void setRtcMinPort(Integer rtcMinPort) { - this.rtcMinPort = rtcMinPort; - } - - public Integer getRtcMaxPort() { - return rtcMaxPort; - } - - public void setRtcMaxPort(Integer rtcMaxPort) { - this.rtcMaxPort = rtcMaxPort; - } - - public String getOnRecordMp4() { - return onRecordMp4; - } - - public void setOnRecordMp4(String onRecordMp4) { - this.onRecordMp4 = onRecordMp4; - } - - public Integer getPictureMaxCount() { - return pictureMaxCount; - } - - public void setPictureMaxCount(Integer pictureMaxCount) { - this.pictureMaxCount = pictureMaxCount; - } - - public String getOnStreamNotFound() { - return onStreamNotFound; - } - - public void setOnStreamNotFound(String onStreamNotFound) { - this.onStreamNotFound = onStreamNotFound; - } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java b/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java index 446574613..ad0c14ed0 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java +++ b/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java @@ -53,6 +53,9 @@ public class MediaServer { @Schema(description = "RTP收流端口(单端口模式有用)") private int rtpProxyPort; + @Schema(description = "1078收流端口(单端口模式有用)") + private int jttProxyPort; + @Schema(description = "RTSP端口") private int rtspPort; @@ -153,7 +156,7 @@ public class MediaServer { // wsFlvSSLPort = config.getHttpSSLport(); rtmpPort = config.getRtmpPort(); // rtmpSSlPort = config.getRtmpSslPort(); - rtpProxyPort = config.getPsTsRecvPort(); + rtpProxyPort = config.getJtt1078RecvPort(); rtspPort = config.getRtspPort(); // rtspSSLPort = config.getRtspSSlport(); autoConfig = true; // 默认值true; diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java index d3aca1f24..50e61cd5c 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java @@ -14,10 +14,14 @@ import java.util.Map; public interface IMediaNodeServerService { int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode); - void closeRtpServer(MediaServer mediaServer, String streamId); - void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback callback); + + int createJTTServer(MediaServer mediaServer, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode); + + void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback callback); + + void closeStreams(MediaServer mediaServer, String app, String stream); Boolean updateRtpServerSSRC(MediaServer mediaServer, String stream, String ssrc); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java index 0fe2aa513..dd828c6f7 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java @@ -41,6 +41,10 @@ public interface IMediaServerService { void closeRTPServer(MediaServer mediaServerItem, String streamId, CommonCallback callback); + SSRCInfo openJTTServer(MediaServer mediaServerItem, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode); + + void closeJTTServer(MediaServer mediaServerItem, String streamId, CommonCallback callback); + Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc); void closeRTPServer(String mediaServerId, String streamId); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java index c09029486..bd105c1b7 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; import java.util.*; @@ -214,6 +215,27 @@ public class MediaServerServiceImpl implements IMediaServerService { return rtpServerPort; } + @Override + public SSRCInfo openJTTServer(MediaServer mediaServer, @NotNull String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) { + if (mediaServer == null || mediaServer.getId() == null) { + log.info("[openJTTServer] 失败, mediaServer == null || mediaServer.getId() == null"); + return null; + } + + int rtpServerPort; + if (mediaServer.isRtpEnable()) { + IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); + if (mediaNodeServerService == null) { + log.info("[openJTTServer] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); + return null; + } + rtpServerPort = mediaNodeServerService.createJTTServer(mediaServer, streamId, port, disableVideo, disableAudio, tcpMode); + } else { + rtpServerPort = mediaServer.getJttProxyPort(); + } + return new SSRCInfo(rtpServerPort, null, "1078", streamId, null); + } + @Override public List listRtpServer(MediaServer mediaServer) { IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); @@ -234,7 +256,7 @@ public class MediaServerServiceImpl implements IMediaServerService { log.info("[closeRTPServer] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); return; } - mediaNodeServerService.closeRtpServer(mediaServer, streamId); + mediaNodeServerService.closeRtpServer(mediaServer, streamId, null); } @Override @@ -268,6 +290,20 @@ public class MediaServerServiceImpl implements IMediaServerService { mediaNodeServerService.closeStreams(mediaServer, "rtp", streamId); } + @Override + public void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback callback) { + if (mediaServer == null) { + callback.run(false); + return; + } + IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); + if (mediaNodeServerService == null) { + log.info("[closeJTTServer] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); + return; + } + mediaNodeServerService.closeRtpServer(mediaServer, streamId, callback); + } + @Override public Boolean updateRtpServerSSRC(MediaServer mediaServer, String streamId, String ssrc) { if (mediaServer == null) { diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java index 1763e7bc0..98b706f45 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java @@ -42,12 +42,17 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService { } @Override - public void closeRtpServer(MediaServer mediaServer, String streamId) { - zlmServerFactory.closeRtpServer(mediaServer, streamId); + public void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback callback) { + zlmServerFactory.closeRtpServer(mediaServer, streamId, callback); } @Override - public void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback callback) { + public int createJTTServer(MediaServer mediaServer, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) { + return zlmServerFactory.createRTPServer(mediaServer, streamId, 0, port, disableVideo, disableAudio, false, tcpMode); + } + + @Override + public void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback callback) { zlmServerFactory.closeRtpServer(mediaServer, streamId, callback); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index 65e9f21cb..668ca25e9 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -99,7 +99,7 @@ public class MediaServiceImpl implements IMediaService { @Override public ResultForOnPublish authenticatePublish(MediaServer mediaServer, String app, String stream, String params) { // 推流鉴权的处理 - if (!"rtp".equals(app)) { + if (!"rtp".equals(app) && !"1078".equals(app) ) { if ("talk".equals(app) && stream.endsWith("_talk")) { ResultForOnPublish result = new ResultForOnPublish(); result.setEnable_mp4(false); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java index f440d57c9..b31fadaa9 100755 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java @@ -23,6 +23,7 @@ public interface MediaServerMapper { "rtmp_port,"+ "rtmp_ssl_port,"+ "rtp_proxy_port,"+ + "jtt_proxy_port,"+ "rtsp_port,"+ "flv_port," + "flv_ssl_port," + @@ -91,6 +92,7 @@ public interface MediaServerMapper { ", rtmp_port=#{rtmpPort}" + ", rtmp_ssl_port=#{rtmpSSlPort}" + ", rtp_proxy_port=#{rtpProxyPort}" + + ", jtt_proxy_port=#{jttProxyPort}" + ", rtsp_port=#{rtspPort}" + ", rtsp_ssl_port=#{rtspSSLPort}" + ", flv_port=#{flvPort}" + @@ -123,6 +125,7 @@ public interface MediaServerMapper { ", rtmp_port=#{rtmpPort}" + ", rtmp_ssl_port=#{rtmpSSlPort}" + ", rtp_proxy_port=#{rtpProxyPort}" + + ", jtt_proxy_port=#{jttProxyPort}" + ", rtsp_port=#{rtspPort}" + ", rtsp_ssl_port=#{rtspSSLPort}" + ", flv_port=#{flvPort}" + diff --git a/数据库/2.7.4/更新-mysql-2.7.4.sql b/数据库/2.7.4/更新-mysql-2.7.4.sql index e69de29bb..1129ddc1d 100644 --- a/数据库/2.7.4/更新-mysql-2.7.4.sql +++ b/数据库/2.7.4/更新-mysql-2.7.4.sql @@ -0,0 +1,98 @@ +drop table IF EXISTS wvp_jt_terminal; +create table IF NOT EXISTS wvp_jt_terminal ( + id serial primary key, + phone_number character varying(50), + terminal_id character varying(50), + province_id character varying(50), + province_text character varying(100), + city_id character varying(50), + city_text character varying(100), + maker_id character varying(50), + model character varying(50), + plate_color character varying(50), + plate_no character varying(50), + authentication_code character varying(255), + longitude double precision, + latitude double precision, + status bool default false, + register_time character varying(50) default null, + update_time character varying(50) not null, + create_time character varying(50) not null, + constraint uk_jt_device_id_device_id unique (id, phone_number) +); + +drop table IF EXISTS wvp_jt_channel; +create table IF NOT EXISTS wvp_jt_channel ( + id serial primary key, + terminal_db_id integer, + channel_id integer, + has_audio bool default false, + name character varying(255), + update_time character varying(50) not null, + create_time character varying(50) not null, + gb_device_id character varying(255), + gb_name character varying(255), + gb_manufacturer character varying(255), + gb_model character varying(255), + gb_civil_code character varying(8), + gb_block character varying(255), + gb_address character varying(255), + gb_parental bool default false, + gb_parent_id character varying(255), + gb_register_way integer default 1, + gb_security_level_code character varying(255), + gb_secrecy integer default 0, + gb_ip_address character varying(255), + gb_port integer, + gb_password character varying(255), + gb_status bool default false, + gb_longitude double precision, + gb_latitude double precision, + gb_business_group_id character varying(255), + gb_ptz_type integer, + gb_photoelectric_imaging_type integer, + gb_capture_position_type integer, + gb_room_type integer, + gb_supply_light_type integer default 1, + gb_direction_type integer, + gb_resolution character varying(255), + gb_stream_number_list character varying(255), + gb_download_speed character varying(255), + gb_svc_space_support_mode integer, + gb_svc_time_support_mode integer, + gb_ssvc_ratio_support_list character varying(255), + gb_mobile_device_type integer, + gb_horizontal_field_angle double precision, + gb_vertical_field_angle double precision, + gb_max_view_distance double precision, + gb_grassroots_code character varying(255), + gb_point_type integer, + gb_point_common_name character varying(255), + gb_mac character varying(255), + gb_function_type character varying(255), + gb_encode_type character varying(255), + gb_install_time character varying(255), + gb_management_unit character varying(255), + gb_contact_info character varying(255), + gb_record_save_days character varying(255), + gb_industrial_classification character varying(255), + constraint uk_jt_device_id_device_id unique (terminal_db_id, channel_id) +); + +/* +* 20250708 +*/ +DELIMITER // -- 重定义分隔符避免分号冲突 +CREATE PROCEDURE `wvp_20250708`() +BEGIN + IF NOT EXISTS (SELECT column_name FROM information_schema.columns + WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'jtt_proxy_port') + THEN + ALTER TABLE wvp_media_server ADD jtt_proxy_port integer; + END IF; +END; // +call wvp_20250708(); +DROP PROCEDURE wvp_20250708; +DELIMITER ; + + diff --git a/数据库/2.7.4/更新-postgresql-kingbase-2.7.4.sql b/数据库/2.7.4/更新-postgresql-kingbase-2.7.4.sql index e69de29bb..616fdfa94 100644 --- a/数据库/2.7.4/更新-postgresql-kingbase-2.7.4.sql +++ b/数据库/2.7.4/更新-postgresql-kingbase-2.7.4.sql @@ -0,0 +1,35 @@ +drop table IF EXISTS wvp_jt_terminal; +create table IF NOT EXISTS wvp_jt_terminal ( + id serial primary key, + phone_number character varying(50), + terminal_id character varying(50), + province_id character varying(50), + province_text character varying(100), + city_id character varying(50), + city_text character varying(100), + maker_id character varying(50), + model character varying(50), + plate_color character varying(50), + plate_no character varying(50), + authentication_code character varying(255), + longitude double precision, + latitude double precision, + status bool default false, + register_time character varying(50) default null, + update_time character varying(50) not null, + create_time character varying(50) not null, + constraint uk_jt_device_id_device_id unique (id, phone_number) +); +drop table IF EXISTS wvp_jt_channel; +create table IF NOT EXISTS wvp_jt_channel ( + id serial primary key, + terminal_db_id integer, + channel_id integer, + has_audio bool default false, + name character varying(255), + update_time character varying(50) not null, + create_time character varying(50) not null, + constraint uk_jt_device_id_device_id unique (terminal_db_id, channel_id) +); + +ALTER table wvp_media_server ADD COLUMN IF NOT EXISTS jtt_proxy_port integer; diff --git a/数据库/JT1078-2.7.2/更新-mysql-2.7.2.sql b/数据库/JT1078-2.7.2/更新-mysql-2.7.2.sql deleted file mode 100644 index f189ef623..000000000 --- a/数据库/JT1078-2.7.2/更新-mysql-2.7.2.sql +++ /dev/null @@ -1,79 +0,0 @@ -create table wvp_jt_terminal ( - id serial primary key, - phone_number character varying(50), - terminal_id character varying(50), - province_id character varying(50), - province_text character varying(100), - city_id character varying(50), - city_text character varying(100), - maker_id character varying(50), - model character varying(50), - plate_color character varying(50), - plate_no character varying(50), - authentication_code character varying(255), - longitude double precision, - latitude double precision, - status bool default false, - register_time character varying(50) default null, - update_time character varying(50) not null, - create_time character varying(50) not null, - constraint uk_jt_device_id_device_id unique (id, phone_number) -); - -create table wvp_jt_channel ( - id serial primary key, - terminal_db_id integer, - channel_id integer, - has_audio bool default false, - name character varying(255), - update_time character varying(50) not null, - create_time character varying(50) not null, - gb_device_id character varying(255), - gb_name character varying(255), - gb_manufacturer character varying(255), - gb_model character varying(255), - gb_civil_code character varying(8), - gb_block character varying(255), - gb_address character varying(255), - gb_parental bool default false, - gb_parent_id character varying(255), - gb_register_way integer default 1, - gb_security_level_code character varying(255), - gb_secrecy integer default 0, - gb_ip_address character varying(255), - gb_port integer, - gb_password character varying(255), - gb_status bool default false, - gb_longitude double precision, - gb_latitude double precision, - gb_business_group_id character varying(255), - gb_ptz_type integer, - gb_photoelectric_imaging_type integer, - gb_capture_position_type integer, - gb_room_type integer, - gb_supply_light_type integer default 1, - gb_direction_type integer, - gb_resolution character varying(255), - gb_stream_number_list character varying(255), - gb_download_speed character varying(255), - gb_svc_space_support_mode integer, - gb_svc_time_support_mode integer, - gb_ssvc_ratio_support_list character varying(255), - gb_mobile_device_type integer, - gb_horizontal_field_angle double precision, - gb_vertical_field_angle double precision, - gb_max_view_distance double precision, - gb_grassroots_code character varying(255), - gb_point_type integer, - gb_point_common_name character varying(255), - gb_mac character varying(255), - gb_function_type character varying(255), - gb_encode_type character varying(255), - gb_install_time character varying(255), - gb_management_unit character varying(255), - gb_contact_info character varying(255), - gb_record_save_days character varying(255), - gb_industrial_classification character varying(255), - constraint uk_jt_device_id_device_id unique (terminal_db_id, channel_id) -); - diff --git a/数据库/JT1078-2.7.2/更新-postgresql-kingbase-2.7.2.sql b/数据库/JT1078-2.7.2/更新-postgresql-kingbase-2.7.2.sql deleted file mode 100644 index 33a8c0c98..000000000 --- a/数据库/JT1078-2.7.2/更新-postgresql-kingbase-2.7.2.sql +++ /dev/null @@ -1,31 +0,0 @@ -create table wvp_jt_terminal ( - id serial primary key, - phone_number character varying(50), - terminal_id character varying(50), - province_id character varying(50), - province_text character varying(100), - city_id character varying(50), - city_text character varying(100), - maker_id character varying(50), - model character varying(50), - plate_color character varying(50), - plate_no character varying(50), - authentication_code character varying(255), - longitude double precision, - latitude double precision, - status bool default false, - register_time character varying(50) default null, - update_time character varying(50) not null, - create_time character varying(50) not null, - constraint uk_jt_device_id_device_id unique (id, phone_number) -); -create table wvp_jt_channel ( - id serial primary key, - terminal_db_id integer, - channel_id integer, - has_audio bool default false, - name character varying(255), - update_time character varying(50) not null, - create_time character varying(50) not null, - constraint uk_jt_device_id_device_id unique (terminal_db_id, channel_id) -); \ No newline at end of file diff --git a/数据库/JT1078-2.7.3/更新-mysql-2.7.3.sql b/数据库/JT1078-2.7.3/更新-mysql-2.7.3.sql deleted file mode 100644 index 52a93648e..000000000 --- a/数据库/JT1078-2.7.3/更新-mysql-2.7.3.sql +++ /dev/null @@ -1,81 +0,0 @@ -drop table IF EXISTS wvp_jt_terminal; -create table IF NOT EXISTS wvp_jt_terminal ( - id serial primary key, - phone_number character varying(50), - terminal_id character varying(50), - province_id character varying(50), - province_text character varying(100), - city_id character varying(50), - city_text character varying(100), - maker_id character varying(50), - model character varying(50), - plate_color character varying(50), - plate_no character varying(50), - authentication_code character varying(255), - longitude double precision, - latitude double precision, - status bool default false, - register_time character varying(50) default null, - update_time character varying(50) not null, - create_time character varying(50) not null, - constraint uk_jt_device_id_device_id unique (id, phone_number) -); - -drop table IF EXISTS wvp_jt_channel; -create table IF NOT EXISTS wvp_jt_channel ( - id serial primary key, - terminal_db_id integer, - channel_id integer, - has_audio bool default false, - name character varying(255), - update_time character varying(50) not null, - create_time character varying(50) not null, - gb_device_id character varying(255), - gb_name character varying(255), - gb_manufacturer character varying(255), - gb_model character varying(255), - gb_civil_code character varying(8), - gb_block character varying(255), - gb_address character varying(255), - gb_parental bool default false, - gb_parent_id character varying(255), - gb_register_way integer default 1, - gb_security_level_code character varying(255), - gb_secrecy integer default 0, - gb_ip_address character varying(255), - gb_port integer, - gb_password character varying(255), - gb_status bool default false, - gb_longitude double precision, - gb_latitude double precision, - gb_business_group_id character varying(255), - gb_ptz_type integer, - gb_photoelectric_imaging_type integer, - gb_capture_position_type integer, - gb_room_type integer, - gb_supply_light_type integer default 1, - gb_direction_type integer, - gb_resolution character varying(255), - gb_stream_number_list character varying(255), - gb_download_speed character varying(255), - gb_svc_space_support_mode integer, - gb_svc_time_support_mode integer, - gb_ssvc_ratio_support_list character varying(255), - gb_mobile_device_type integer, - gb_horizontal_field_angle double precision, - gb_vertical_field_angle double precision, - gb_max_view_distance double precision, - gb_grassroots_code character varying(255), - gb_point_type integer, - gb_point_common_name character varying(255), - gb_mac character varying(255), - gb_function_type character varying(255), - gb_encode_type character varying(255), - gb_install_time character varying(255), - gb_management_unit character varying(255), - gb_contact_info character varying(255), - gb_record_save_days character varying(255), - gb_industrial_classification character varying(255), - constraint uk_jt_device_id_device_id unique (terminal_db_id, channel_id) -); - diff --git a/数据库/JT1078-2.7.3/更新-postgresql-kingbase-2.7.3.sql b/数据库/JT1078-2.7.3/更新-postgresql-kingbase-2.7.3.sql deleted file mode 100644 index 74117f370..000000000 --- a/数据库/JT1078-2.7.3/更新-postgresql-kingbase-2.7.3.sql +++ /dev/null @@ -1,33 +0,0 @@ -drop table IF EXISTS wvp_jt_terminal; -create table IF NOT EXISTS wvp_jt_terminal ( - id serial primary key, - phone_number character varying(50), - terminal_id character varying(50), - province_id character varying(50), - province_text character varying(100), - city_id character varying(50), - city_text character varying(100), - maker_id character varying(50), - model character varying(50), - plate_color character varying(50), - plate_no character varying(50), - authentication_code character varying(255), - longitude double precision, - latitude double precision, - status bool default false, - register_time character varying(50) default null, - update_time character varying(50) not null, - create_time character varying(50) not null, - constraint uk_jt_device_id_device_id unique (id, phone_number) -); -drop table IF EXISTS wvp_jt_channel; -create table IF NOT EXISTS wvp_jt_channel ( - id serial primary key, - terminal_db_id integer, - channel_id integer, - has_audio bool default false, - name character varying(255), - update_time character varying(50) not null, - create_time character varying(50) not null, - constraint uk_jt_device_id_device_id unique (terminal_db_id, channel_id) -); \ No newline at end of file