[1078] 适配abl的播放1078

This commit is contained in:
lin 2025-07-09 12:32:31 +08:00
parent 17c967ed4e
commit 48eff320fd
24 changed files with 336 additions and 931 deletions

View File

@ -182,7 +182,7 @@ public class StreamInfo implements Serializable, Cloneable{
if (callIdParam != null) { if (callIdParam != null) {
callIdParam = Objects.equals(callIdParam, "") ? callIdParam : callIdParam.replace("?", "&"); 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) { if (port > 0) {
this.rtc = new StreamURL("http", host, port, file); this.rtc = new StreamURL("http", host, port, file);
} }

View File

@ -66,6 +66,9 @@ public class MediaConfig{
@Value("${media.rtp-proxy-port:0}") @Value("${media.rtp-proxy-port:0}")
private Integer rtpProxyPort = 0; private Integer rtpProxyPort = 0;
@Value("${media.jtt-proxy-port:0}")
private Integer jttProxyPort = 0;
@Value("${media.rtsp-port:0}") @Value("${media.rtsp-port:0}")
private Integer rtspPort = 0; private Integer rtspPort = 0;
@ -122,7 +125,7 @@ public class MediaConfig{
public int getRtmpPort() { public int getRtmpPort() {
return rtmpPort; return rtmpPort;
} }
public int getRtmpSSlPort() { public int getRtmpSSlPort() {
return rtmpSSlPort; return rtmpSSlPort;
} }
@ -136,6 +139,14 @@ public class MediaConfig{
} }
public Integer getJttProxyPort() {
if (jttProxyPort == null) {
return 0;
}else {
return jttProxyPort;
}
}
public int getRtspPort() { public int getRtspPort() {
return rtspPort; return rtspPort;
} }
@ -159,7 +170,7 @@ public class MediaConfig{
public String getRtpPortRange() { public String getRtpPortRange() {
return rtpPortRange; return rtpPortRange;
} }
public int getRecordAssistPort() { public int getRecordAssistPort() {
return recordAssistPort; return recordAssistPort;
} }
@ -229,6 +240,7 @@ public class MediaConfig{
mediaServer.setRtmpPort(rtmpPort); mediaServer.setRtmpPort(rtmpPort);
mediaServer.setRtmpSSlPort(rtmpSSlPort); mediaServer.setRtmpSSlPort(rtmpSSlPort);
mediaServer.setRtpProxyPort(getRtpProxyPort()); mediaServer.setRtpProxyPort(getRtpProxyPort());
mediaServer.setJttProxyPort(getJttProxyPort());
mediaServer.setRtspPort(rtspPort); mediaServer.setRtspPort(rtspPort);
mediaServer.setRtspSSLPort(rtspSSLPort); mediaServer.setRtspSSLPort(rtspSSLPort);
mediaServer.setAutoConfig(autoConfig); mediaServer.setAutoConfig(autoConfig);

View File

@ -40,7 +40,7 @@ public class Jt808Decoder extends ByteToMessageDecoder {
@Override @Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
Session session = ctx.channel().attr(Session.KEY).get(); 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 { try {
ByteBuf buf = unEscapeAndCheck(in); ByteBuf buf = unEscapeAndCheck(in);

View File

@ -88,7 +88,7 @@ public class JT1078Controller {
} }
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
result.onTimeout(()->{ result.onTimeout(()->{
log.info("[1078-点播等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId); log.info("[JT-点播等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
// 释放rtpserver // 释放rtpserver
WVPResult<StreamContent> wvpResult = new WVPResult<>(); WVPResult<StreamContent> wvpResult = new WVPResult<>();
wvpResult.setCode(ErrorCode.ERROR100.getCode()); wvpResult.setCode(ErrorCode.ERROR100.getCode());
@ -152,7 +152,7 @@ public class JT1078Controller {
@Parameter(required = false) Boolean onlySend) { @Parameter(required = false) Boolean onlySend) {
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
result.onTimeout(()->{ result.onTimeout(()->{
log.info("[1078-语音对讲超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId); log.info("[JT-语音对讲超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
// 释放rtpserver // 释放rtpserver
WVPResult<StreamContent> wvpResult = new WVPResult<>(); WVPResult<StreamContent> wvpResult = new WVPResult<>();
wvpResult.setCode(ErrorCode.ERROR100.getCode()); wvpResult.setCode(ErrorCode.ERROR100.getCode());
@ -275,7 +275,7 @@ public class JT1078Controller {
) { ) {
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
result.onTimeout(()->{ result.onTimeout(()->{
log.info("[1078-回放-等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId); log.info("[JT-回放-等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
// 释放rtpserver // 释放rtpserver
WVPResult<StreamContent> wvpResult = new WVPResult<>(); WVPResult<StreamContent> wvpResult = new WVPResult<>();
wvpResult.setCode(ErrorCode.ERROR100.getCode()); wvpResult.setCode(ErrorCode.ERROR100.getCode());
@ -359,7 +359,7 @@ public class JT1078Controller {
@Parameter(required = false) Integer storageType @Parameter(required = false) Integer storageType
) throws IOException { ) throws IOException {
log.info("[1078-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},报警标志: {}, 音视频类型: {} 码流类型: {},存储器类型: {} ", log.info("[JT-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},报警标志: {}, 音视频类型: {} 码流类型: {},存储器类型: {} ",
phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType); phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType);
if (!ftpSetting.getEnable()) { if (!ftpSetting.getEnable()) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务无法下载录像"); throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务无法下载录像");
@ -403,7 +403,7 @@ public class JT1078Controller {
@GetMapping("/ptz") @GetMapping("/ptz")
public void ptz(String phoneNumber, Integer channelId, String command, int speed){ 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); service.ptzControl(phoneNumber, channelId, command, speed);
} }
@ -414,7 +414,7 @@ public class JT1078Controller {
@GetMapping("/fill-light") @GetMapping("/fill-light")
public void fillLight(String phoneNumber, Integer channelId, String command){ 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); service.supplementaryLight(phoneNumber, channelId, command);
} }
@ -425,7 +425,7 @@ public class JT1078Controller {
@GetMapping("/wiper") @GetMapping("/wiper")
public void wiper(String phoneNumber, Integer channelId, String command){ 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); service.wiper(phoneNumber, channelId, command);
} }
@ -434,7 +434,7 @@ public class JT1078Controller {
@GetMapping("/config") @GetMapping("/config")
public JTDeviceConfig config(String phoneNumber, String[] params){ public JTDeviceConfig config(String phoneNumber, String[] params){
log.info("[1078-查询终端参数] phoneNumber{}", phoneNumber); log.info("[JT-查询终端参数] phoneNumber{}", phoneNumber);
return service.queryConfig(phoneNumber, params, null); return service.queryConfig(phoneNumber, params, null);
} }
@ -444,7 +444,7 @@ public class JT1078Controller {
@PostMapping("/set-config") @PostMapping("/set-config")
public void setConfig(@RequestBody SetConfigParam config){ public void setConfig(@RequestBody SetConfigParam config){
log.info("[1078-设置终端参数] 参数: {}", config.toString()); log.info("[JT-设置终端参数] 参数: {}", config.toString());
service.setConfig(config.getPhoneNumber(), config.getConfig()); service.setConfig(config.getPhoneNumber(), config.getConfig());
} }
@ -453,7 +453,7 @@ public class JT1078Controller {
@PostMapping("/control/connection") @PostMapping("/control/connection")
public void connectionControl(@RequestBody ConnectionControlParam control){ public void connectionControl(@RequestBody ConnectionControlParam control){
log.info("[1078-终端控制] 参数: {}", control.toString()); log.info("[JT-终端控制] 参数: {}", control.toString());
service.connectionControl(control.getPhoneNumber(), control.getControl()); service.connectionControl(control.getPhoneNumber(), control.getControl());
} }
@ -462,7 +462,7 @@ public class JT1078Controller {
@PostMapping("/control/reset") @PostMapping("/control/reset")
public void resetControl(String phoneNumber){ public void resetControl(String phoneNumber){
log.info("[1078-复位] phoneNumber: {}", phoneNumber); log.info("[JT-复位] phoneNumber: {}", phoneNumber);
service.resetControl(phoneNumber); service.resetControl(phoneNumber);
} }
@ -471,7 +471,7 @@ public class JT1078Controller {
@PostMapping("/control/factory-reset") @PostMapping("/control/factory-reset")
public void factoryResetControl(String phoneNumber){ public void factoryResetControl(String phoneNumber){
log.info("[1078-恢复出厂设置] phoneNumber: {}", phoneNumber); log.info("[JT-恢复出厂设置] phoneNumber: {}", phoneNumber);
service.factoryResetControl(phoneNumber); service.factoryResetControl(phoneNumber);
} }
@ -480,7 +480,7 @@ public class JT1078Controller {
@GetMapping("/attribute") @GetMapping("/attribute")
public JTDeviceAttribute attribute(String phoneNumber){ public JTDeviceAttribute attribute(String phoneNumber){
log.info("[1078-查询终端属性] phoneNumber: {}", phoneNumber); log.info("[JT-查询终端属性] phoneNumber: {}", phoneNumber);
return service.attribute(phoneNumber); return service.attribute(phoneNumber);
} }
@ -489,7 +489,7 @@ public class JT1078Controller {
@GetMapping("/position-info") @GetMapping("/position-info")
public JTPositionBaseInfo queryPositionInfo(String phoneNumber){ public JTPositionBaseInfo queryPositionInfo(String phoneNumber){
log.info("[1078-查询位置信息] phoneNumber: {}", phoneNumber); log.info("[JT-查询位置信息] phoneNumber: {}", phoneNumber);
return service.queryPositionInfo(phoneNumber); return service.queryPositionInfo(phoneNumber);
} }
@ -500,7 +500,7 @@ public class JT1078Controller {
@GetMapping("/control/temp-position-tracking") @GetMapping("/control/temp-position-tracking")
public void tempPositionTrackingControl(String phoneNumber, Integer timeInterval, Long validityPeriod){ 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); service.tempPositionTrackingControl(phoneNumber, timeInterval, validityPeriod);
} }
@ -511,7 +511,7 @@ public class JT1078Controller {
@PostMapping("/confirmation-alarm-message") @PostMapping("/confirmation-alarm-message")
public void confirmationAlarmMessage(@RequestBody ConfirmationAlarmMessageParam param){ public void confirmationAlarmMessage(@RequestBody ConfirmationAlarmMessageParam param){
log.info("[1078-人工确认报警消息] 参数: {}", param); log.info("[JT-人工确认报警消息] 参数: {}", param);
service.confirmationAlarmMessage(param.getPhoneNumber(), param.getAlarmPackageNo(), param.getAlarmMessageType()); service.confirmationAlarmMessage(param.getPhoneNumber(), param.getAlarmPackageNo(), param.getAlarmMessageType());
} }
@ -520,7 +520,7 @@ public class JT1078Controller {
@GetMapping("/link-detection") @GetMapping("/link-detection")
public WVPResult<Integer> linkDetection(String phoneNumber){ public WVPResult<Integer> linkDetection(String phoneNumber){
log.info("[1078-链路检测] phoneNumber: {}", phoneNumber); log.info("[JT-链路检测] phoneNumber: {}", phoneNumber);
int result = service.linkDetection(phoneNumber); int result = service.linkDetection(phoneNumber);
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -536,7 +536,7 @@ public class JT1078Controller {
@PostMapping("/text-msg") @PostMapping("/text-msg")
public WVPResult<Integer> textMessage(@RequestBody TextMessageParam textMessageParam){ public WVPResult<Integer> 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()); int result = service.textMessage(textMessageParam.getPhoneNumber(), textMessageParam.getSign(), textMessageParam.getTextType(), textMessageParam.getContent());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -554,7 +554,7 @@ public class JT1078Controller {
@GetMapping("/telephone-callback") @GetMapping("/telephone-callback")
public WVPResult<Integer> telephoneCallback(String phoneNumber, Integer sign, String destPhoneNumber){ public WVPResult<Integer> 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); int result = service.telephoneCallback(phoneNumber, sign, destPhoneNumber);
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -570,7 +570,7 @@ public class JT1078Controller {
@PostMapping("/set-phone-book") @PostMapping("/set-phone-book")
public WVPResult<Integer> setPhoneBook(@RequestBody SetPhoneBookParam setPhoneBookParam){ public WVPResult<Integer> setPhoneBook(@RequestBody SetPhoneBookParam setPhoneBookParam){
log.info("[1078-设置电话本] setPhoneBookParam: {}", setPhoneBookParam); log.info("[JT-设置电话本] setPhoneBookParam: {}", setPhoneBookParam);
int result = service.setPhoneBook(setPhoneBookParam.getPhoneNumber(), setPhoneBookParam.getType(), setPhoneBookParam.getPhoneBookContactList()); int result = service.setPhoneBook(setPhoneBookParam.getPhoneNumber(), setPhoneBookParam.getType(), setPhoneBookParam.getPhoneBookContactList());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -587,7 +587,7 @@ public class JT1078Controller {
@GetMapping("/control/door") @GetMapping("/control/door")
public WVPResult<Integer> controlDoor(String phoneNumber, Boolean open){ public WVPResult<Integer> 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); JTPositionBaseInfo positionBaseInfo = service.controlDoor(phoneNumber, open);
if (open == !positionBaseInfo.getStatus().isDoorLocking()) { if (open == !positionBaseInfo.getStatus().isDoorLocking()) {
@ -602,7 +602,7 @@ public class JT1078Controller {
@PostMapping("/area/circle/update") @PostMapping("/area/circle/update")
public WVPResult<Integer> updateAreaForCircle(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> updateAreaForCircle(@RequestBody SetAreaParam areaParam){
log.info("[1078-更新圆形区域] areaParam: {},", areaParam); log.info("[JT-更新圆形区域] areaParam: {},", areaParam);
int result = service.setAreaForCircle(0, areaParam.getPhoneNumber(), areaParam.getCircleAreaList()); int result = service.setAreaForCircle(0, areaParam.getPhoneNumber(), areaParam.getCircleAreaList());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -618,7 +618,7 @@ public class JT1078Controller {
@PostMapping("/area/circle/add") @PostMapping("/area/circle/add")
public WVPResult<Integer> addAreaForCircle(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> addAreaForCircle(@RequestBody SetAreaParam areaParam){
log.info("[1078-追加圆形区域] areaParam: {},", areaParam); log.info("[JT-追加圆形区域] areaParam: {},", areaParam);
int result = service.setAreaForCircle(1, areaParam.getPhoneNumber(), areaParam.getCircleAreaList()); int result = service.setAreaForCircle(1, areaParam.getPhoneNumber(), areaParam.getCircleAreaList());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -634,7 +634,7 @@ public class JT1078Controller {
@PostMapping("/area/circle/edit") @PostMapping("/area/circle/edit")
public WVPResult<Integer> editAreaForCircle(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> editAreaForCircle(@RequestBody SetAreaParam areaParam){
log.info("[1078-修改圆形区域] areaParam: {},", areaParam); log.info("[JT-修改圆形区域] areaParam: {},", areaParam);
int result = service.setAreaForCircle(2, areaParam.getPhoneNumber(), areaParam.getCircleAreaList()); int result = service.setAreaForCircle(2, areaParam.getPhoneNumber(), areaParam.getCircleAreaList());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -651,7 +651,7 @@ public class JT1078Controller {
@GetMapping("/area/circle/delete") @GetMapping("/area/circle/delete")
public WVPResult<Integer> deleteAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<Integer> deleteAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-删除圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-删除圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids);
int result = service.deleteAreaForCircle(phoneNumber, ids); int result = service.deleteAreaForCircle(phoneNumber, ids);
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -667,7 +667,7 @@ public class JT1078Controller {
@GetMapping("/area/circle/query") @GetMapping("/area/circle/query")
public WVPResult<List<JTAreaOrRoute>> queryAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<List<JTAreaOrRoute>> queryAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-查询圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-查询圆形区域] phoneNumber: {}, ids:{}", phoneNumber, ids);
List<JTAreaOrRoute> result = service.queryAreaForCircle(phoneNumber, ids); List<JTAreaOrRoute> result = service.queryAreaForCircle(phoneNumber, ids);
if (result != null) { if (result != null) {
return WVPResult.success(result); return WVPResult.success(result);
@ -682,7 +682,7 @@ public class JT1078Controller {
@PostMapping("/area/rectangle/update") @PostMapping("/area/rectangle/update")
public WVPResult<Integer> updateAreaForRectangle(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> updateAreaForRectangle(@RequestBody SetAreaParam areaParam){
log.info("[1078-更新矩形区域] areaParam: {},", areaParam); log.info("[JT-更新矩形区域] areaParam: {},", areaParam);
int result = service.setAreaForRectangle(0, areaParam.getPhoneNumber(), areaParam.getRectangleAreas()); int result = service.setAreaForRectangle(0, areaParam.getPhoneNumber(), areaParam.getRectangleAreas());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -698,7 +698,7 @@ public class JT1078Controller {
@PostMapping("/area/rectangle/add") @PostMapping("/area/rectangle/add")
public WVPResult<Integer> addAreaForRectangle(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> addAreaForRectangle(@RequestBody SetAreaParam areaParam){
log.info("[1078-追加矩形区域] areaParam: {},", areaParam); log.info("[JT-追加矩形区域] areaParam: {},", areaParam);
int result = service.setAreaForRectangle(1, areaParam.getPhoneNumber(), areaParam.getRectangleAreas()); int result = service.setAreaForRectangle(1, areaParam.getPhoneNumber(), areaParam.getRectangleAreas());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -714,7 +714,7 @@ public class JT1078Controller {
@PostMapping("/area/rectangle/edit") @PostMapping("/area/rectangle/edit")
public WVPResult<Integer> editAreaForRectangle(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> editAreaForRectangle(@RequestBody SetAreaParam areaParam){
log.info("[1078-修改矩形区域] areaParam: {},", areaParam); log.info("[JT-修改矩形区域] areaParam: {},", areaParam);
int result = service.setAreaForRectangle(2, areaParam.getPhoneNumber(), areaParam.getRectangleAreas()); int result = service.setAreaForRectangle(2, areaParam.getPhoneNumber(), areaParam.getRectangleAreas());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -731,7 +731,7 @@ public class JT1078Controller {
@GetMapping("/area/rectangle/delete") @GetMapping("/area/rectangle/delete")
public WVPResult<Integer> deleteAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<Integer> deleteAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-删除矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-删除矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids);
int result = service.deleteAreaForRectangle(phoneNumber, ids); int result = service.deleteAreaForRectangle(phoneNumber, ids);
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -747,7 +747,7 @@ public class JT1078Controller {
@GetMapping("/area/rectangle/query") @GetMapping("/area/rectangle/query")
public WVPResult<List<JTAreaOrRoute>> queryAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<List<JTAreaOrRoute>> queryAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-查询矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-查询矩形区域] phoneNumber: {}, ids:{}", phoneNumber, ids);
List<JTAreaOrRoute> result = service.queryAreaForRectangle(phoneNumber, ids); List<JTAreaOrRoute> result = service.queryAreaForRectangle(phoneNumber, ids);
if (result != null) { if (result != null) {
return WVPResult.success(result); return WVPResult.success(result);
@ -761,7 +761,7 @@ public class JT1078Controller {
@PostMapping("/area/polygon/set") @PostMapping("/area/polygon/set")
public WVPResult<Integer> setAreaForPolygon(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> setAreaForPolygon(@RequestBody SetAreaParam areaParam){
log.info("[1078-设置多边形区域] areaParam: {},", areaParam); log.info("[JT-设置多边形区域] areaParam: {},", areaParam);
int result = service.setAreaForPolygon(areaParam.getPhoneNumber(), areaParam.getPolygonArea()); int result = service.setAreaForPolygon(areaParam.getPhoneNumber(), areaParam.getPolygonArea());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -778,7 +778,7 @@ public class JT1078Controller {
@GetMapping("/area/polygon/delete") @GetMapping("/area/polygon/delete")
public WVPResult<Integer> deleteAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<Integer> deleteAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-删除多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-删除多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids);
int result = service.deleteAreaForPolygon(phoneNumber, ids); int result = service.deleteAreaForPolygon(phoneNumber, ids);
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -794,7 +794,7 @@ public class JT1078Controller {
@GetMapping("/area/polygon/query") @GetMapping("/area/polygon/query")
public WVPResult<List<JTAreaOrRoute>> queryAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<List<JTAreaOrRoute>> queryAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-查询多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-查询多边形区域] phoneNumber: {}, ids:{}", phoneNumber, ids);
List<JTAreaOrRoute> result = service.queryAreaForPolygon(phoneNumber, ids); List<JTAreaOrRoute> result = service.queryAreaForPolygon(phoneNumber, ids);
if (result != null) { if (result != null) {
return WVPResult.success(result); return WVPResult.success(result);
@ -808,7 +808,7 @@ public class JT1078Controller {
@PostMapping("/route/set") @PostMapping("/route/set")
public WVPResult<Integer> setRoute(@RequestBody SetAreaParam areaParam){ public WVPResult<Integer> setRoute(@RequestBody SetAreaParam areaParam){
log.info("[1078-设置路线] areaParam: {},", areaParam); log.info("[JT-设置路线] areaParam: {},", areaParam);
int result = service.setRoute(areaParam.getPhoneNumber(), areaParam.getRoute()); int result = service.setRoute(areaParam.getPhoneNumber(), areaParam.getRoute());
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -825,7 +825,7 @@ public class JT1078Controller {
@GetMapping("/route/delete") @GetMapping("/route/delete")
public WVPResult<Integer> deleteRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<Integer> deleteRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-删除路线] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-删除路线] phoneNumber: {}, ids:{}", phoneNumber, ids);
int result = service.deleteRoute(phoneNumber, ids); int result = service.deleteRoute(phoneNumber, ids);
if (result == 0) { if (result == 0) {
return WVPResult.success(result); return WVPResult.success(result);
@ -841,7 +841,7 @@ public class JT1078Controller {
@GetMapping("/route/query") @GetMapping("/route/query")
public WVPResult<List<JTAreaOrRoute>> queryRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){ public WVPResult<List<JTAreaOrRoute>> queryRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
log.info("[1078-查询路线] phoneNumber: {}, ids:{}", phoneNumber, ids); log.info("[JT-查询路线] phoneNumber: {}, ids:{}", phoneNumber, ids);
List<JTAreaOrRoute> result = service.queryRoute(phoneNumber, ids); List<JTAreaOrRoute> result = service.queryRoute(phoneNumber, ids);
if (result != null) { if (result != null) {
return WVPResult.success(result); return WVPResult.success(result);
@ -857,7 +857,7 @@ public class JT1078Controller {
@GetMapping("/driver-information") @GetMapping("/driver-information")
public WVPResult<JTDriverInformation> queryDriverInformation(String phoneNumber){ public WVPResult<JTDriverInformation> queryDriverInformation(String phoneNumber){
log.info("[1078-上报驾驶员身份信息请求] phoneNumber: {}", phoneNumber); log.info("[JT-上报驾驶员身份信息请求] phoneNumber: {}", phoneNumber);
JTDriverInformation jtDriverInformation = service.queryDriverInformation(phoneNumber); JTDriverInformation jtDriverInformation = service.queryDriverInformation(phoneNumber);
if (jtDriverInformation != null) { if (jtDriverInformation != null) {
return WVPResult.success(jtDriverInformation); return WVPResult.success(jtDriverInformation);
@ -871,7 +871,7 @@ public class JT1078Controller {
@PostMapping("/shooting") @PostMapping("/shooting")
public WVPResult<List<Long>> shooting(@RequestBody ShootingParam param){ public WVPResult<List<Long>> shooting(@RequestBody ShootingParam param){
log.info("[1078-摄像头立即拍摄命令] param: {}", param ); log.info("[JT-摄像头立即拍摄命令] param: {}", param );
List<Long> ids = service.shooting(param.getPhoneNumber(), param.getShootingCommand()); List<Long> ids = service.shooting(param.getPhoneNumber(), param.getShootingCommand());
if (ids != null) { if (ids != null) {
return WVPResult.success(ids); return WVPResult.success(ids);
@ -885,7 +885,7 @@ public class JT1078Controller {
@PostMapping("/media-data-info") @PostMapping("/media-data-info")
public WVPResult<List<JTMediaDataInfo>> queryMediaData(@RequestBody QueryMediaDataParam param){ public WVPResult<List<JTMediaDataInfo>> queryMediaData(@RequestBody QueryMediaDataParam param){
log.info("[1078-存储多媒体数据检索] param: {}", param ); log.info("[JT-存储多媒体数据检索] param: {}", param );
List<JTMediaDataInfo> ids = service.queryMediaData(param.getPhoneNumber(), param.getQueryMediaDataCommand()); List<JTMediaDataInfo> ids = service.queryMediaData(param.getPhoneNumber(), param.getQueryMediaDataCommand());
if (ids != null) { if (ids != null) {
return WVPResult.success(ids); return WVPResult.success(ids);
@ -899,12 +899,12 @@ public class JT1078Controller {
@PostMapping("/media-data-upload") @PostMapping("/media-data-upload")
public DeferredResult<WVPResult<List<String>>> updateMediaData(@RequestBody QueryMediaDataParam param){ public DeferredResult<WVPResult<List<String>>> updateMediaData(@RequestBody QueryMediaDataParam param){
log.info("[1078-存储多媒体数据上传命令] param: {}", param ); log.info("[JT-存储多媒体数据上传命令] param: {}", param );
DeferredResult<WVPResult<List<String>>> deferredResult = new DeferredResult<>(30000L); DeferredResult<WVPResult<List<String>>> deferredResult = new DeferredResult<>(30000L);
List<String> resultList = new ArrayList<>(); List<String> resultList = new ArrayList<>();
deferredResult.onTimeout(()->{ deferredResult.onTimeout(()->{
log.info("[1078-存储多媒体数据上传命令超时] param: {}", param ); log.info("[JT-存储多媒体数据上传命令超时] param: {}", param );
WVPResult<List<String>> fail = WVPResult.fail(ErrorCode.ERROR100); WVPResult<List<String>> fail = WVPResult.fail(ErrorCode.ERROR100);
fail.setMsg("超时"); fail.setMsg("超时");
fail.setData(resultList); fail.setData(resultList);
@ -945,7 +945,7 @@ public class JT1078Controller {
try { try {
monitor.start(); monitor.start();
} catch (Exception e) { } catch (Exception e) {
log.info("[1078-存储多媒体数据上传命令监听文件失败] param: {}", param ); log.info("[JT-存储多媒体数据上传命令监听文件失败] param: {}", param );
deferredResult.setResult(null); deferredResult.setResult(null);
return deferredResult; return deferredResult;
} }

View File

@ -1,12 +1,14 @@
package com.genersoft.iot.vmp.jt1078.proc; package com.genersoft.iot.vmp.jt1078.proc;
import com.genersoft.iot.vmp.jt1078.util.Bin; import com.genersoft.iot.vmp.jt1078.util.Bin;
import lombok.Data;
/** /**
* @author QingtaiJiang * @author QingtaiJiang
* @date 2023/4/27 18:22 * @date 2023/4/27 18:22
* @email qingtaij@163.com * @email qingtaij@163.com
*/ */
@Data
public class Header { public class Header {
// 消息ID // 消息ID
String msgId; String msgId;
@ -24,46 +26,6 @@ public class Header {
Short version = -1; 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的版本 * 判断是否是2019的版本
* *

View File

@ -172,6 +172,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
if (channel == null) { if (channel == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "通道不存在"); throw new ControllerException(ErrorCode.ERROR100.getCode(), "通道不存在");
} }
String app = "1078";
String stream = phoneNumber + "_" + channelId;
// 检查流是否已经存在存在则返回 // 检查流是否已经存在存在则返回
String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAY + phoneNumber + ":" + channelId; String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAY + phoneNumber + ":" + channelId;
List<CommonCallback<WVPResult<StreamInfo>>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playKey, k -> new ArrayList<>()); List<CommonCallback<WVPResult<StreamInfo>>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playKey, k -> new ArrayList<>());
@ -181,9 +184,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
MediaServer mediaServer = streamInfo.getMediaServer(); MediaServer mediaServer = streamInfo.getMediaServer();
if (mediaServer != null) { if (mediaServer != null) {
// 查询流是否存在不存在则删除缓存数据 // 查询流是否存在不存在则删除缓存数据
MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, "rtp", streamInfo.getStream()); MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, app, streamInfo.getStream());
if (mediaInfo != null) { if (mediaInfo != null) {
log.info("[1078-点播] 点播已经存在,直接返回, phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-点播] 点播已经存在,直接返回, phoneNumber {} channelId {}", phoneNumber, channelId);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo)); errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo));
} }
@ -193,7 +196,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
// 清理数据 // 清理数据
redisTemplate.delete(playKey); redisTemplate.delete(playKey);
} }
String stream = "jt_" + phoneNumber + "_" + channelId;
MediaServer mediaServer = mediaServerService.getMediaServerForMinimumLoad(null); MediaServer mediaServer = mediaServerService.getMediaServerForMinimumLoad(null);
if (mediaServer == null) { if (mediaServer == null) {
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
@ -202,10 +205,10 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
return; return;
} }
// 设置hook监听 // 设置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) -> { subscribe.addSubscribe(hook, (hookData) -> {
dynamicTask.stop(playKey); dynamicTask.stop(playKey);
log.info("[1078-点播] 点播成功, 手机号: {} 通道: {}", phoneNumber, channelId); log.info("[JT-点播] 点播成功, 手机号: {} 通道: {}", phoneNumber, channelId);
// TODO 发送9105 实时音视频传输状态通知 通知丢包率 // TODO 发送9105 实时音视频传输状态通知 通知丢包率
StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId); StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId);
@ -222,26 +225,30 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
String fileName = phoneNumber + "_" + channelId + ".jpg"; String fileName = phoneNumber + "_" + channelId + ".jpg";
// 请求截图 // 请求截图
log.info("[请求截图]: " + fileName); 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) { if (ssrcInfo == null) {
stopPlay(phoneNumber, channelId); stopPlay(phoneNumber, channelId);
return; return;
} }
// 设置超时监听 // 设置超时监听
dynamicTask.startDelay(playKey, () -> { dynamicTask.startDelay(playKey, () -> {
log.info("[1078-点播] 超时, phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-点播] 超时, phoneNumber {} channelId {}", phoneNumber, channelId);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getCode(), errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getCode(),
InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getMsg(), null)); InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getMsg(), null));
} }
mediaServerService.closeRTPServer(mediaServer, stream); mediaServerService.closeJTTServer(mediaServer, stream, null);
subscribe.removeSubscribe(hook); subscribe.removeSubscribe(hook);
stopPlay(phoneNumber, channelId);
}, userSetting.getPlayTimeout()); }, 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 j9101 = new J9101();
j9101.setChannel(channelId); j9101.setChannel(channelId);
j9101.setIp(mediaServer.getSdpIp()); j9101.setIp(mediaServer.getSdpIp());
@ -253,7 +260,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
} }
public StreamInfo onPublishHandler(MediaServer mediaServerItem, HookData hookData, String phoneNumber, Integer channelId) { 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.setDeviceId(phoneNumber);
streamInfo.setChannelId(channelId); streamInfo.setChannelId(channelId);
return streamInfo; return streamInfo;
@ -279,11 +286,11 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
j9102.setCloseType(0); j9102.setCloseType(0);
j9102.setStreamType(1); j9102.setStreamType(1);
jt1078Template.stopLive(phoneNumber, j9102, 6); jt1078Template.stopLive(phoneNumber, j9102, 6);
log.info("[1078-停止点播] phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-停止点播] phoneNumber {} channelId {}", phoneNumber, channelId);
// 删除缓存数据 // 删除缓存数据
if (streamInfo != null) { if (streamInfo != null) {
// 关闭rtpServer // 关闭rtpServer
mediaServerService.closeRTPServer(streamInfo.getMediaServer(), streamInfo.getStream()); mediaServerService.closeJTTServer(streamInfo.getMediaServer(), streamInfo.getStream(), null);
redisTemplate.delete(playKey); redisTemplate.delete(playKey);
} }
@ -295,9 +302,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
dynamicTask.stop(playKey); dynamicTask.stop(playKey);
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey); StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
if (streamInfo == null) { 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 j9102 = new J9102();
j9102.setChannel(Integer.valueOf(channelId)); j9102.setChannel(Integer.valueOf(channelId));
@ -313,9 +320,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
dynamicTask.stop(playKey); dynamicTask.stop(playKey);
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey); StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
if (streamInfo == null) { 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 j9102 = new J9102();
j9102.setChannel(Integer.valueOf(channelId)); j9102.setChannel(Integer.valueOf(channelId));
@ -327,7 +334,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
@Override @Override
public List<J1205.JRecordItem> getRecordList(String phoneNumber, Integer channelId, String startTime, String endTime) { public List<J1205.JRecordItem> 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); , phoneNumber, channelId, startTime, endTime);
// 发送请求录像列表命令 // 发送请求录像列表命令
J9205 j9205 = new J9205(); J9205 j9205 = new J9205();
@ -341,7 +348,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
if (JRecordItemList == null || JRecordItemList.isEmpty()) { if (JRecordItemList == null || JRecordItemList.isEmpty()) {
return null; return null;
} }
log.info("[1078-查询录像列表] phoneNumber {} channelId {} startTime {} endTime {}, 结果: {}条" log.info("[JT-查询录像列表] phoneNumber {} channelId {} startTime {} endTime {}, 结果: {}条"
, phoneNumber, channelId, startTime, endTime, JRecordItemList.size()); , phoneNumber, channelId, startTime, endTime, JRecordItemList.size());
return JRecordItemList; return JRecordItemList;
} }
@ -349,7 +356,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
@Override @Override
public void playback(String phoneNumber, Integer channelId, String startTime, String endTime, Integer type, public void playback(String phoneNumber, Integer channelId, String startTime, String endTime, Integer type,
Integer rate, Integer playbackType, Integer playbackSpeed, CommonCallback<WVPResult<StreamInfo>> callback) { Integer rate, Integer playbackType, Integer playbackSpeed, CommonCallback<WVPResult<StreamInfo>> callback) {
log.info("[1078-回放] 回放,设备:{} 通道: {} 开始时间: {} 结束时间: {} 音视频类型: {} 码流类型: {} " + log.info("[JT-回放] 回放,设备:{} 通道: {} 开始时间: {} 结束时间: {} 音视频类型: {} 码流类型: {} " +
"回放方式: {} 快进或快退倍数: {}", phoneNumber, channelId, startTime, endTime, type, rate, playbackType, playbackSpeed); "回放方式: {} 快进或快退倍数: {}", phoneNumber, channelId, startTime, endTime, type, rate, playbackType, playbackSpeed);
// 检查流是否已经存在存在则返回 // 检查流是否已经存在存在则返回
String playbackKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + phoneNumber + ":" + channelId; String playbackKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + phoneNumber + ":" + channelId;
@ -361,9 +368,9 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
MediaServer mediaServer = streamInfo.getMediaServer(); MediaServer mediaServer = streamInfo.getMediaServer();
if (mediaServer != null) { if (mediaServer != null) {
// 查询流是否存在不存在则删除缓存数据 // 查询流是否存在不存在则删除缓存数据
MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, "rtp", streamInfo.getStream()); MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServer, "1078", streamInfo.getStream());
if (mediaInfo != null) { if (mediaInfo != null) {
log.info("[1078-回放] 回放已经存在,直接返回, logInfo {}", logInfo); log.info("[JT-回放] 回放已经存在,直接返回, logInfo {}", logInfo);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo)); errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), streamInfo));
} }
@ -384,10 +391,10 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
return; return;
} }
// 设置hook监听 // 设置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) -> { subscribe.addSubscribe(hookSubscribe, (hookData) -> {
dynamicTask.stop(playbackKey); dynamicTask.stop(playbackKey);
log.info("[1078-回放] 回放成功, logInfo {}", logInfo); log.info("[JT-回放] 回放成功, logInfo {}", logInfo);
StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId); StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
@ -401,7 +408,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
}); });
// 设置超时监听 // 设置超时监听
dynamicTask.startDelay(playbackKey, () -> { dynamicTask.startDelay(playbackKey, () -> {
log.info("[1078-回放] 回放超时, logInfo {}", logInfo); log.info("[JT-回放] 回放超时, logInfo {}", logInfo);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode(), errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode(),
InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getMsg(), null)); InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getMsg(), null));
@ -410,8 +417,8 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
}, userSetting.getPlayTimeout()); }, userSetting.getPlayTimeout());
// 开启收流端口 // 开启收流端口
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServer, stream, null, false, false, 0, false, false, false, 1); SSRCInfo ssrcInfo = mediaServerService.openJTTServer(mediaServer, stream, null, false, false, 1);
log.info("[1078-回放] logInfo {} 端口: {}", logInfo, ssrcInfo.getPort()); log.info("[JT-回放] logInfo {} 端口: {}", logInfo, ssrcInfo.getPort());
J9201 j9201 = new J9201(); J9201 j9201 = new J9201();
j9201.setChannel(channelId); j9201.setChannel(channelId);
j9201.setIp(mediaServer.getSdpIp()); j9201.setIp(mediaServer.getSdpIp());
@ -436,7 +443,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
@Override @Override
public void playbackControl(String phoneNumber, Integer channelId, Integer command, Integer playbackSpeed, String time) { 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); phoneNumber, channelId, command, playbackSpeed, time);
String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + phoneNumber + ":" + channelId; String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + phoneNumber + ":" + channelId;
dynamicTask.stop(playKey); dynamicTask.stop(playKey);
@ -446,7 +453,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
// 删除缓存数据 // 删除缓存数据
if (streamInfo != null) { if (streamInfo != null) {
// 关闭rtpServer // 关闭rtpServer
mediaServerService.closeRTPServer(streamInfo.getMediaServer(), streamInfo.getStream()); mediaServerService.closeJTTServer(streamInfo.getMediaServer(), streamInfo.getStream(), null);
} }
// 清理回调 // 清理回调
List<CommonCallback<WVPResult<StreamInfo>>> generalCallbacks = inviteErrorCallbackMap.get(playKey); List<CommonCallback<WVPResult<StreamInfo>>> generalCallbacks = inviteErrorCallbackMap.get(playKey);
@ -555,10 +562,10 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
} }
if (onlySend == null || !onlySend) { if (onlySend == null || !onlySend) {
// 设置hook监听 // 设置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) -> { subscribe.addSubscribe(hook, (hookData) -> {
dynamicTask.stop(playKey); dynamicTask.stop(playKey);
log.info("[1078-对讲] 对讲成功, phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-对讲] 对讲成功, phoneNumber {} channelId {}", phoneNumber, channelId);
StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId); StreamInfo info = onPublishHandler(mediaServer, hookData, phoneNumber, channelId);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
@ -569,14 +576,14 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
// 存储发流信息 // 存储发流信息
sendRtpServerService.update(sendRtpInfo); 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) -> { 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); stopTalk(phoneNumber, channelId);
}); });
// 设置超时监听 // 设置超时监听
dynamicTask.startDelay(playKey, () -> { dynamicTask.startDelay(playKey, () -> {
log.info("[1078-对讲] 超时, phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-对讲] 超时, phoneNumber {} channelId {}", phoneNumber, channelId);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode(), errorCallback.run(new WVPResult<>(InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode(),
InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getMsg(), null)); InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getMsg(), null));
@ -585,7 +592,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
}, userSetting.getPlayTimeout()); }, userSetting.getPlayTimeout());
} }
log.info("[1078-对讲] phoneNumber {} channelId {} 收发端口: {} app: {}, stream: {}", log.info("[JT-对讲] phoneNumber {} channelId {} 收发端口: {} app: {}, stream: {}",
phoneNumber, channelId, sendRtpInfo.getLocalPort(), app, stream); phoneNumber, channelId, sendRtpInfo.getLocalPort(), app, stream);
J9101 j9101 = new J9101(); J9101 j9101 = new J9101();
j9101.setChannel(Integer.valueOf(channelId)); j9101.setChannel(Integer.valueOf(channelId));
@ -596,7 +603,7 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
j9101.setType(2); j9101.setType(2);
jt1078Template.startLive(phoneNumber, j9101, 6); jt1078Template.startLive(phoneNumber, j9101, 6);
if (onlySend != null && onlySend) { if (onlySend != null && onlySend) {
log.info("[1078-对讲] 对讲成功, phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-对讲] 对讲成功, phoneNumber {} channelId {}", phoneNumber, channelId);
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) { for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), null)); errorCallback.run(new WVPResult<>(InviteErrorCode.SUCCESS.getCode(), InviteErrorCode.SUCCESS.getMsg(), null));
} }
@ -617,12 +624,12 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
j9102.setCloseType(0); j9102.setCloseType(0);
j9102.setStreamType(1); j9102.setStreamType(1);
jt1078Template.stopLive(phoneNumber, j9102, 6); jt1078Template.stopLive(phoneNumber, j9102, 6);
log.info("[1078-停止对讲] phoneNumber {} channelId {}", phoneNumber, channelId); log.info("[JT-停止对讲] phoneNumber {} channelId {}", phoneNumber, channelId);
// 删除缓存数据 // 删除缓存数据
if (streamInfo != null) { if (streamInfo != null) {
redisTemplate.delete(playKey); redisTemplate.delete(playKey);
// 关闭rtpServer // 关闭rtpServer
mediaServerService.closeRTPServer(streamInfo.getMediaServer(), streamInfo.getStream()); mediaServerService.closeJTTServer(streamInfo.getMediaServer(), streamInfo.getStream(), null);
} }
// 清理回调 // 清理回调
List<CommonCallback<WVPResult<StreamInfo>>> generalCallbacks = inviteErrorCallbackMap.get(playKey); List<CommonCallback<WVPResult<StreamInfo>>> generalCallbacks = inviteErrorCallbackMap.get(playKey);

View File

@ -174,7 +174,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
dynamicTask.startDelay(filePath, ()->{ dynamicTask.startDelay(filePath, ()->{
fileUploadMap.remove(filePath); fileUploadMap.remove(filePath);
}, 2*60*60*1000); }, 2*60*60*1000);
log.info("[1078-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},等待上传文件路径: {} ", log.info("[JT-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},等待上传文件路径: {} ",
phoneNumber, channelId, startTime, endTime, filePath); phoneNumber, channelId, startTime, endTime, filePath);
// 发送停止命令 // 发送停止命令
J9206 j92026 = new J9206(); J9206 j92026 = new J9206();
@ -575,9 +575,9 @@ public class jt1078ServiceImpl implements Ijt1078Service {
dynamicTask.stop(playKey); dynamicTask.stop(playKey);
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey); StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
if (streamInfo == null) { 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 j9102 = new J9102();
j9102.setChannel(Integer.valueOf(channelId)); j9102.setChannel(Integer.valueOf(channelId));

View File

@ -61,12 +61,7 @@ public class ABLMediaNodeServerService implements IMediaNodeServerService {
@Override @Override
public int createRTPServer(MediaServer mediaServer, String stream, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { public int createRTPServer(MediaServer mediaServer, String stream, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) {
Boolean recordSip = userSetting.getRecordSip(); Boolean recordSip = userSetting.getRecordSip();
return ablresTfulUtils.openRtpServer(mediaServer, "rtp", stream, 96, port, tcpMode, disableAudio?1:0, recordSip); return ablresTfulUtils.openRtpServer(mediaServer, "rtp", stream, 96, port, tcpMode, disableAudio?1:0, recordSip, false);
}
@Override
public void closeRtpServer(MediaServer mediaServer, String streamId) {
closeRtpServer(mediaServer, streamId, null);
} }
@Override @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<Boolean> callback) {
closeRtpServer(mediaServer, streamId, callback);
}
@Override @Override
public void closeStreams(MediaServer mediaServer, String app, String streamId) { public void closeStreams(MediaServer mediaServer, String app, String streamId) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();

View File

@ -231,6 +231,9 @@ public class ABLMediaServerStatusManger {
if (mediaServerItem.getRtpProxyPort() != ablServerConfig.getPsTsRecvPort()) { if (mediaServerItem.getRtpProxyPort() != ablServerConfig.getPsTsRecvPort()) {
mediaServerItem.setRtpProxyPort(ablServerConfig.getPsTsRecvPort()); mediaServerItem.setRtpProxyPort(ablServerConfig.getPsTsRecvPort());
} }
if (mediaServerItem.getRtpProxyPort() != ablServerConfig.getJtt1078RecvPort()) {
mediaServerItem.setJttProxyPort(ablServerConfig.getJtt1078RecvPort());
}
// if (mediaServerItem.getRtspSSLPort() == 0) { // if (mediaServerItem.getRtspSSLPort() == 0) {
// mediaServerItem.setRtspSSLPort(ablServerConfig.getRtspSSlport()); // mediaServerItem.setRtspSSLPort(ablServerConfig.getRtspSSlport());
// } // }

View File

@ -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, Boolean isJtt) {
public Integer openRtpServer(MediaServer mediaServer, String app, String stream, int payload, Integer port, Integer tcpMode, Integer disableAudio, Boolean record) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("vhost", "_defaultVhost_"); param.put("vhost", "_defaultVhost_");
param.put("app", app); param.put("app", app);
param.put("stream_id", stream); param.put("stream_id", stream);
param.put("payload", payload); param.put("payload", payload);
param.put("jtt1078_version", "2016"); if (isJtt) {
param.put("RtpPayloadDataType", 4); // 1 PS 国标gb28181, 默认为1
// 2 ES 视频支持 H246\H265音频只支持G711AG711U AAC
// 3 XHB (一家公司的打包格式) 只支持视频音频不能加入打包
// 4 Jt10782016版本码流接入
param.put("RtpPayloadDataType", 4);
param.put("jtt1078_version", "2016");
}
if (port != null) { if (port != null) {
param.put("port", port); param.put("port", port);
}else {
param.put("port", 0);
} }
if (tcpMode != null) { if (tcpMode != null) {
param.put("enable_tcp", tcpMode); param.put("enable_tcp", tcpMode);

View File

@ -2,11 +2,13 @@ package com.genersoft.iot.vmp.media.abl.bean;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import lombok.Data;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Data
public class AblServerConfig { public class AblServerConfig {
@ConfigKeyId("secret") @ConfigKeyId("secret")
@ -51,6 +53,9 @@ public class AblServerConfig {
@ConfigKeyId("ps_tsRecvPort") @ConfigKeyId("ps_tsRecvPort")
private Integer psTsRecvPort; private Integer psTsRecvPort;
@ConfigKeyId("1078Port")
private Integer jtt1078RecvPort;
@ConfigKeyId("hlsCutType") @ConfigKeyId("hlsCutType")
private Integer hlsCutType; private Integer hlsCutType;
@ -249,564 +254,4 @@ public class AblServerConfig {
} }
return 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;
}
} }

View File

@ -53,6 +53,9 @@ public class MediaServer {
@Schema(description = "RTP收流端口单端口模式有用") @Schema(description = "RTP收流端口单端口模式有用")
private int rtpProxyPort; private int rtpProxyPort;
@Schema(description = "1078收流端口单端口模式有用")
private int jttProxyPort;
@Schema(description = "RTSP端口") @Schema(description = "RTSP端口")
private int rtspPort; private int rtspPort;
@ -153,7 +156,7 @@ public class MediaServer {
// wsFlvSSLPort = config.getHttpSSLport(); // wsFlvSSLPort = config.getHttpSSLport();
rtmpPort = config.getRtmpPort(); rtmpPort = config.getRtmpPort();
// rtmpSSlPort = config.getRtmpSslPort(); // rtmpSSlPort = config.getRtmpSslPort();
rtpProxyPort = config.getPsTsRecvPort(); rtpProxyPort = config.getJtt1078RecvPort();
rtspPort = config.getRtspPort(); rtspPort = config.getRtspPort();
// rtspSSLPort = config.getRtspSSlport(); // rtspSSLPort = config.getRtspSSlport();
autoConfig = true; // 默认值true; autoConfig = true; // 默认值true;

View File

@ -14,10 +14,14 @@ import java.util.Map;
public interface IMediaNodeServerService { public interface IMediaNodeServerService {
int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode); 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<Boolean> callback); void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback<Boolean> callback);
int createJTTServer(MediaServer mediaServer, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode);
void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback<Boolean> callback);
void closeStreams(MediaServer mediaServer, String app, String stream); void closeStreams(MediaServer mediaServer, String app, String stream);
Boolean updateRtpServerSSRC(MediaServer mediaServer, String stream, String ssrc); Boolean updateRtpServerSSRC(MediaServer mediaServer, String stream, String ssrc);

View File

@ -41,6 +41,10 @@ public interface IMediaServerService {
void closeRTPServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback); void closeRTPServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback);
SSRCInfo openJTTServer(MediaServer mediaServerItem, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode);
void closeJTTServer(MediaServer mediaServerItem, String streamId, CommonCallback<Boolean> callback);
Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc); Boolean updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc);
void closeRTPServer(String mediaServerId, String streamId); void closeRTPServer(String mediaServerId, String streamId);

View File

@ -41,6 +41,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -214,6 +215,27 @@ public class MediaServerServiceImpl implements IMediaServerService {
return rtpServerPort; 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 @Override
public List<String> listRtpServer(MediaServer mediaServer) { public List<String> listRtpServer(MediaServer mediaServer) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType());
@ -234,7 +256,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
log.info("[closeRTPServer] 失败, mediaServer的类型 {},未找到对应的实现类", mediaServer.getType()); log.info("[closeRTPServer] 失败, mediaServer的类型 {},未找到对应的实现类", mediaServer.getType());
return; return;
} }
mediaNodeServerService.closeRtpServer(mediaServer, streamId); mediaNodeServerService.closeRtpServer(mediaServer, streamId, null);
} }
@Override @Override
@ -268,6 +290,20 @@ public class MediaServerServiceImpl implements IMediaServerService {
mediaNodeServerService.closeStreams(mediaServer, "rtp", streamId); mediaNodeServerService.closeStreams(mediaServer, "rtp", streamId);
} }
@Override
public void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback<Boolean> 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 @Override
public Boolean updateRtpServerSSRC(MediaServer mediaServer, String streamId, String ssrc) { public Boolean updateRtpServerSSRC(MediaServer mediaServer, String streamId, String ssrc) {
if (mediaServer == null) { if (mediaServer == null) {

View File

@ -42,12 +42,17 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
} }
@Override @Override
public void closeRtpServer(MediaServer mediaServer, String streamId) { public void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback<Boolean> callback) {
zlmServerFactory.closeRtpServer(mediaServer, streamId); zlmServerFactory.closeRtpServer(mediaServer, streamId, callback);
} }
@Override @Override
public void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback<Boolean> 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<Boolean> callback) {
zlmServerFactory.closeRtpServer(mediaServer, streamId, callback); zlmServerFactory.closeRtpServer(mediaServer, streamId, callback);
} }

View File

@ -99,7 +99,7 @@ public class MediaServiceImpl implements IMediaService {
@Override @Override
public ResultForOnPublish authenticatePublish(MediaServer mediaServer, String app, String stream, String params) { 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")) { if ("talk".equals(app) && stream.endsWith("_talk")) {
ResultForOnPublish result = new ResultForOnPublish(); ResultForOnPublish result = new ResultForOnPublish();
result.setEnable_mp4(false); result.setEnable_mp4(false);

View File

@ -23,6 +23,7 @@ public interface MediaServerMapper {
"rtmp_port,"+ "rtmp_port,"+
"rtmp_ssl_port,"+ "rtmp_ssl_port,"+
"rtp_proxy_port,"+ "rtp_proxy_port,"+
"jtt_proxy_port,"+
"rtsp_port,"+ "rtsp_port,"+
"flv_port," + "flv_port," +
"flv_ssl_port," + "flv_ssl_port," +
@ -91,6 +92,7 @@ public interface MediaServerMapper {
"<if test=\"rtmpPort != null\">, rtmp_port=#{rtmpPort}</if>" + "<if test=\"rtmpPort != null\">, rtmp_port=#{rtmpPort}</if>" +
"<if test=\"rtmpSSlPort != null\">, rtmp_ssl_port=#{rtmpSSlPort}</if>" + "<if test=\"rtmpSSlPort != null\">, rtmp_ssl_port=#{rtmpSSlPort}</if>" +
"<if test=\"rtpProxyPort != null\">, rtp_proxy_port=#{rtpProxyPort}</if>" + "<if test=\"rtpProxyPort != null\">, rtp_proxy_port=#{rtpProxyPort}</if>" +
"<if test=\"jttProxyPort != null\">, jtt_proxy_port=#{jttProxyPort}</if>" +
"<if test=\"rtspPort != null\">, rtsp_port=#{rtspPort}</if>" + "<if test=\"rtspPort != null\">, rtsp_port=#{rtspPort}</if>" +
"<if test=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</if>" + "<if test=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</if>" +
"<if test=\"flvPort != null\">, flv_port=#{flvPort}</if>" + "<if test=\"flvPort != null\">, flv_port=#{flvPort}</if>" +
@ -123,6 +125,7 @@ public interface MediaServerMapper {
"<if test=\"rtmpPort != null\">, rtmp_port=#{rtmpPort}</if>" + "<if test=\"rtmpPort != null\">, rtmp_port=#{rtmpPort}</if>" +
"<if test=\"rtmpSSlPort != null\">, rtmp_ssl_port=#{rtmpSSlPort}</if>" + "<if test=\"rtmpSSlPort != null\">, rtmp_ssl_port=#{rtmpSSlPort}</if>" +
"<if test=\"rtpProxyPort != null\">, rtp_proxy_port=#{rtpProxyPort}</if>" + "<if test=\"rtpProxyPort != null\">, rtp_proxy_port=#{rtpProxyPort}</if>" +
"<if test=\"jttProxyPort != null\">, jtt_proxy_port=#{jttProxyPort}</if>" +
"<if test=\"rtspPort != null\">, rtsp_port=#{rtspPort}</if>" + "<if test=\"rtspPort != null\">, rtsp_port=#{rtspPort}</if>" +
"<if test=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</if>" + "<if test=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</if>" +
"<if test=\"flvPort != null\">, flv_port=#{flvPort}</if>" + "<if test=\"flvPort != null\">, flv_port=#{flvPort}</if>" +

View File

@ -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 ;

View File

@ -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;

View File

@ -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)
);

View File

@ -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)
);

View File

@ -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)
);

View File

@ -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)
);