[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) {
callIdParam = Objects.equals(callIdParam, "") ? callIdParam : callIdParam.replace("?", "&");
}
String file = String.format("index/api/webrtc?app=%s&stream=%s&type=%s%s", app, stream, isPlay?"play":"push", callIdParam);
String file = String.format("%s/%s?type=%s%s", app, stream, isPlay?"play":"push", callIdParam);
if (port > 0) {
this.rtc = new StreamURL("http", host, port, file);
}

View File

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

View File

@@ -40,7 +40,7 @@ public class Jt808Decoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
Session session = ctx.channel().attr(Session.KEY).get();
log.info("> {} hex:{}", session, ByteBufUtil.hexDump(in));
log.info("> {} hex: 7e{}7e", session, ByteBufUtil.hexDump(in));
try {
ByteBuf buf = unEscapeAndCheck(in);

View File

@@ -88,7 +88,7 @@ public class JT1078Controller {
}
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
result.onTimeout(()->{
log.info("[1078-点播等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
log.info("[JT-点播等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
// 释放rtpserver
WVPResult<StreamContent> wvpResult = new WVPResult<>();
wvpResult.setCode(ErrorCode.ERROR100.getCode());
@@ -152,7 +152,7 @@ public class JT1078Controller {
@Parameter(required = false) Boolean onlySend) {
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
result.onTimeout(()->{
log.info("[1078-语音对讲超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
log.info("[JT-语音对讲超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
// 释放rtpserver
WVPResult<StreamContent> wvpResult = new WVPResult<>();
wvpResult.setCode(ErrorCode.ERROR100.getCode());
@@ -275,7 +275,7 @@ public class JT1078Controller {
) {
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
result.onTimeout(()->{
log.info("[1078-回放-等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
log.info("[JT-回放-等待超时] phoneNumber{}, channelId{}, ", phoneNumber, channelId);
// 释放rtpserver
WVPResult<StreamContent> wvpResult = new WVPResult<>();
wvpResult.setCode(ErrorCode.ERROR100.getCode());
@@ -359,7 +359,7 @@ public class JT1078Controller {
@Parameter(required = false) Integer storageType
) throws IOException {
log.info("[1078-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},报警标志: {}, 音视频类型: {} 码流类型: {},存储器类型: {} ",
log.info("[JT-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},报警标志: {}, 音视频类型: {} 码流类型: {},存储器类型: {} ",
phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType);
if (!ftpSetting.getEnable()) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务无法下载录像");
@@ -403,7 +403,7 @@ public class JT1078Controller {
@GetMapping("/ptz")
public void ptz(String phoneNumber, Integer channelId, String command, int speed){
log.info("[1078-云台控制] phoneNumber{}, channelId{}, command: {}, speed: {}", phoneNumber, channelId, command, speed);
log.info("[JT-云台控制] phoneNumber{}, channelId{}, command: {}, speed: {}", phoneNumber, channelId, command, speed);
service.ptzControl(phoneNumber, channelId, command, speed);
}
@@ -414,7 +414,7 @@ public class JT1078Controller {
@GetMapping("/fill-light")
public void fillLight(String phoneNumber, Integer channelId, String command){
log.info("[1078-补光灯开关] phoneNumber{}, channelId{}, command: {}", phoneNumber, channelId, command);
log.info("[JT-补光灯开关] phoneNumber{}, channelId{}, command: {}", phoneNumber, channelId, command);
service.supplementaryLight(phoneNumber, channelId, command);
}
@@ -425,7 +425,7 @@ public class JT1078Controller {
@GetMapping("/wiper")
public void wiper(String phoneNumber, Integer channelId, String command){
log.info("[1078-雨刷开关] phoneNumber{}, channelId{}, command: {}", phoneNumber, channelId, command);
log.info("[JT-雨刷开关] phoneNumber{}, channelId{}, command: {}", phoneNumber, channelId, command);
service.wiper(phoneNumber, channelId, command);
}
@@ -434,7 +434,7 @@ public class JT1078Controller {
@GetMapping("/config")
public JTDeviceConfig config(String phoneNumber, String[] params){
log.info("[1078-查询终端参数] phoneNumber{}", phoneNumber);
log.info("[JT-查询终端参数] phoneNumber{}", phoneNumber);
return service.queryConfig(phoneNumber, params, null);
}
@@ -444,7 +444,7 @@ public class JT1078Controller {
@PostMapping("/set-config")
public void setConfig(@RequestBody SetConfigParam config){
log.info("[1078-设置终端参数] 参数: {}", config.toString());
log.info("[JT-设置终端参数] 参数: {}", config.toString());
service.setConfig(config.getPhoneNumber(), config.getConfig());
}
@@ -453,7 +453,7 @@ public class JT1078Controller {
@PostMapping("/control/connection")
public void connectionControl(@RequestBody ConnectionControlParam control){
log.info("[1078-终端控制] 参数: {}", control.toString());
log.info("[JT-终端控制] 参数: {}", control.toString());
service.connectionControl(control.getPhoneNumber(), control.getControl());
}
@@ -462,7 +462,7 @@ public class JT1078Controller {
@PostMapping("/control/reset")
public void resetControl(String phoneNumber){
log.info("[1078-复位] phoneNumber: {}", phoneNumber);
log.info("[JT-复位] phoneNumber: {}", phoneNumber);
service.resetControl(phoneNumber);
}
@@ -471,7 +471,7 @@ public class JT1078Controller {
@PostMapping("/control/factory-reset")
public void factoryResetControl(String phoneNumber){
log.info("[1078-恢复出厂设置] phoneNumber: {}", phoneNumber);
log.info("[JT-恢复出厂设置] phoneNumber: {}", phoneNumber);
service.factoryResetControl(phoneNumber);
}
@@ -480,7 +480,7 @@ public class JT1078Controller {
@GetMapping("/attribute")
public JTDeviceAttribute attribute(String phoneNumber){
log.info("[1078-查询终端属性] phoneNumber: {}", phoneNumber);
log.info("[JT-查询终端属性] phoneNumber: {}", phoneNumber);
return service.attribute(phoneNumber);
}
@@ -489,7 +489,7 @@ public class JT1078Controller {
@GetMapping("/position-info")
public JTPositionBaseInfo queryPositionInfo(String phoneNumber){
log.info("[1078-查询位置信息] phoneNumber: {}", phoneNumber);
log.info("[JT-查询位置信息] phoneNumber: {}", phoneNumber);
return service.queryPositionInfo(phoneNumber);
}
@@ -500,7 +500,7 @@ public class JT1078Controller {
@GetMapping("/control/temp-position-tracking")
public void tempPositionTrackingControl(String phoneNumber, Integer timeInterval, Long validityPeriod){
log.info("[1078-临时位置跟踪控制] phoneNumber: {}, 时间间隔 {}秒, 位置跟踪有效期 {}秒", phoneNumber, timeInterval, validityPeriod);
log.info("[JT-临时位置跟踪控制] phoneNumber: {}, 时间间隔 {}秒, 位置跟踪有效期 {}秒", phoneNumber, timeInterval, validityPeriod);
service.tempPositionTrackingControl(phoneNumber, timeInterval, validityPeriod);
}
@@ -511,7 +511,7 @@ public class JT1078Controller {
@PostMapping("/confirmation-alarm-message")
public void confirmationAlarmMessage(@RequestBody ConfirmationAlarmMessageParam param){
log.info("[1078-人工确认报警消息] 参数: {}", param);
log.info("[JT-人工确认报警消息] 参数: {}", param);
service.confirmationAlarmMessage(param.getPhoneNumber(), param.getAlarmPackageNo(), param.getAlarmMessageType());
}
@@ -520,7 +520,7 @@ public class JT1078Controller {
@GetMapping("/link-detection")
public WVPResult<Integer> linkDetection(String phoneNumber){
log.info("[1078-链路检测] phoneNumber: {}", phoneNumber);
log.info("[JT-链路检测] phoneNumber: {}", phoneNumber);
int result = service.linkDetection(phoneNumber);
if (result == 0) {
return WVPResult.success(result);
@@ -536,7 +536,7 @@ public class JT1078Controller {
@PostMapping("/text-msg")
public WVPResult<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());
if (result == 0) {
return WVPResult.success(result);
@@ -554,7 +554,7 @@ public class JT1078Controller {
@GetMapping("/telephone-callback")
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);
if (result == 0) {
return WVPResult.success(result);
@@ -570,7 +570,7 @@ public class JT1078Controller {
@PostMapping("/set-phone-book")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -587,7 +587,7 @@ public class JT1078Controller {
@GetMapping("/control/door")
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);
if (open == !positionBaseInfo.getStatus().isDoorLocking()) {
@@ -602,7 +602,7 @@ public class JT1078Controller {
@PostMapping("/area/circle/update")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -618,7 +618,7 @@ public class JT1078Controller {
@PostMapping("/area/circle/add")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -634,7 +634,7 @@ public class JT1078Controller {
@PostMapping("/area/circle/edit")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -651,7 +651,7 @@ public class JT1078Controller {
@GetMapping("/area/circle/delete")
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);
if (result == 0) {
return WVPResult.success(result);
@@ -667,7 +667,7 @@ public class JT1078Controller {
@GetMapping("/area/circle/query")
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);
if (result != null) {
return WVPResult.success(result);
@@ -682,7 +682,7 @@ public class JT1078Controller {
@PostMapping("/area/rectangle/update")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -698,7 +698,7 @@ public class JT1078Controller {
@PostMapping("/area/rectangle/add")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -714,7 +714,7 @@ public class JT1078Controller {
@PostMapping("/area/rectangle/edit")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -731,7 +731,7 @@ public class JT1078Controller {
@GetMapping("/area/rectangle/delete")
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);
if (result == 0) {
return WVPResult.success(result);
@@ -747,7 +747,7 @@ public class JT1078Controller {
@GetMapping("/area/rectangle/query")
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);
if (result != null) {
return WVPResult.success(result);
@@ -761,7 +761,7 @@ public class JT1078Controller {
@PostMapping("/area/polygon/set")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -778,7 +778,7 @@ public class JT1078Controller {
@GetMapping("/area/polygon/delete")
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);
if (result == 0) {
return WVPResult.success(result);
@@ -794,7 +794,7 @@ public class JT1078Controller {
@GetMapping("/area/polygon/query")
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);
if (result != null) {
return WVPResult.success(result);
@@ -808,7 +808,7 @@ public class JT1078Controller {
@PostMapping("/route/set")
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());
if (result == 0) {
return WVPResult.success(result);
@@ -825,7 +825,7 @@ public class JT1078Controller {
@GetMapping("/route/delete")
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);
if (result == 0) {
return WVPResult.success(result);
@@ -841,7 +841,7 @@ public class JT1078Controller {
@GetMapping("/route/query")
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);
if (result != null) {
return WVPResult.success(result);
@@ -857,7 +857,7 @@ public class JT1078Controller {
@GetMapping("/driver-information")
public WVPResult<JTDriverInformation> queryDriverInformation(String phoneNumber){
log.info("[1078-上报驾驶员身份信息请求] phoneNumber: {}", phoneNumber);
log.info("[JT-上报驾驶员身份信息请求] phoneNumber: {}", phoneNumber);
JTDriverInformation jtDriverInformation = service.queryDriverInformation(phoneNumber);
if (jtDriverInformation != null) {
return WVPResult.success(jtDriverInformation);
@@ -871,7 +871,7 @@ public class JT1078Controller {
@PostMapping("/shooting")
public WVPResult<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());
if (ids != null) {
return WVPResult.success(ids);
@@ -885,7 +885,7 @@ public class JT1078Controller {
@PostMapping("/media-data-info")
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());
if (ids != null) {
return WVPResult.success(ids);
@@ -899,12 +899,12 @@ public class JT1078Controller {
@PostMapping("/media-data-upload")
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);
List<String> resultList = new ArrayList<>();
deferredResult.onTimeout(()->{
log.info("[1078-存储多媒体数据上传命令超时] param: {}", param );
log.info("[JT-存储多媒体数据上传命令超时] param: {}", param );
WVPResult<List<String>> fail = WVPResult.fail(ErrorCode.ERROR100);
fail.setMsg("超时");
fail.setData(resultList);
@@ -945,7 +945,7 @@ public class JT1078Controller {
try {
monitor.start();
} catch (Exception e) {
log.info("[1078-存储多媒体数据上传命令监听文件失败] param: {}", param );
log.info("[JT-存储多媒体数据上传命令监听文件失败] param: {}", param );
deferredResult.setResult(null);
return deferredResult;
}

View File

@@ -1,12 +1,14 @@
package com.genersoft.iot.vmp.jt1078.proc;
import com.genersoft.iot.vmp.jt1078.util.Bin;
import lombok.Data;
/**
* @author QingtaiJiang
* @date 2023/4/27 18:22
* @email qingtaij@163.com
*/
@Data
public class Header {
// 消息ID
String msgId;
@@ -24,46 +26,6 @@ public class Header {
Short version = -1;
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public Integer getMsgPro() {
return msgPro;
}
public void setMsgPro(Integer msgPro) {
this.msgPro = msgPro;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Integer getSn() {
return sn;
}
public void setSn(Integer sn) {
this.sn = sn;
}
public Short getVersion() {
return version;
}
public void setVersion(Short version) {
this.version = version;
}
/**
* 判断是否是2019的版本
*

View File

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

View File

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

View File

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

View File

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

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

View File

@@ -2,11 +2,13 @@ package com.genersoft.iot.vmp.media.abl.bean;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import lombok.Data;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
@Data
public class AblServerConfig {
@ConfigKeyId("secret")
@@ -51,6 +53,9 @@ public class AblServerConfig {
@ConfigKeyId("ps_tsRecvPort")
private Integer psTsRecvPort;
@ConfigKeyId("1078Port")
private Integer jtt1078RecvPort;
@ConfigKeyId("hlsCutType")
private Integer hlsCutType;
@@ -249,564 +254,4 @@ public class AblServerConfig {
}
return ablServerConfig;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getServerIp() {
return serverIp;
}
public void setServerIp(String serverIp) {
this.serverIp = serverIp;
}
public String getMediaServerId() {
return mediaServerId;
}
public void setMediaServerId(String mediaServerId) {
this.mediaServerId = mediaServerId;
}
public Integer getHookEnable() {
return hookEnable;
}
public void setHookEnable(Integer hookEnable) {
this.hookEnable = hookEnable;
}
public Integer getEnableAudio() {
return enableAudio;
}
public void setEnableAudio(Integer enableAudio) {
this.enableAudio = enableAudio;
}
public Integer getHttpServerPort() {
return httpServerPort;
}
public void setHttpServerPort(Integer httpServerPort) {
this.httpServerPort = httpServerPort;
}
public Integer getRtspPort() {
return rtspPort;
}
public void setRtspPort(Integer rtspPort) {
this.rtspPort = rtspPort;
}
public Integer getRtmpPort() {
return rtmpPort;
}
public void setRtmpPort(Integer rtmpPort) {
this.rtmpPort = rtmpPort;
}
public Integer getHttpFlvPort() {
return httpFlvPort;
}
public void setHttpFlvPort(Integer httpFlvPort) {
this.httpFlvPort = httpFlvPort;
}
public Integer getHlsEnable() {
return hlsEnable;
}
public void setHlsEnable(Integer hlsEnable) {
this.hlsEnable = hlsEnable;
}
public Integer getHlsPort() {
return hlsPort;
}
public void setHlsPort(Integer hlsPort) {
this.hlsPort = hlsPort;
}
public Integer getWsPort() {
return wsPort;
}
public void setWsPort(Integer wsPort) {
this.wsPort = wsPort;
}
public Integer getMp4Port() {
return mp4Port;
}
public void setMp4Port(Integer mp4Port) {
this.mp4Port = mp4Port;
}
public Integer getPsTsRecvPort() {
return psTsRecvPort;
}
public void setPsTsRecvPort(Integer psTsRecvPort) {
this.psTsRecvPort = psTsRecvPort;
}
public Integer getHlsCutType() {
return hlsCutType;
}
public void setHlsCutType(Integer hlsCutType) {
this.hlsCutType = hlsCutType;
}
public Integer getH265CutType() {
return h265CutType;
}
public void setH265CutType(Integer h265CutType) {
this.h265CutType = h265CutType;
}
public Integer getRecvThreadCount() {
return RecvThreadCount;
}
public void setRecvThreadCount(Integer recvThreadCount) {
RecvThreadCount = recvThreadCount;
}
public Integer getSendThreadCount() {
return SendThreadCount;
}
public void setSendThreadCount(Integer sendThreadCount) {
SendThreadCount = sendThreadCount;
}
public Integer getGB28181RtpTCPHeadType() {
return GB28181RtpTCPHeadType;
}
public void setGB28181RtpTCPHeadType(Integer GB28181RtpTCPHeadType) {
this.GB28181RtpTCPHeadType = GB28181RtpTCPHeadType;
}
public Integer getReConnectingCount() {
return ReConnectingCount;
}
public void setReConnectingCount(Integer reConnectingCount) {
ReConnectingCount = reConnectingCount;
}
public Integer getMaxTimeNoOneWatch() {
return maxTimeNoOneWatch;
}
public void setMaxTimeNoOneWatch(Integer maxTimeNoOneWatch) {
this.maxTimeNoOneWatch = maxTimeNoOneWatch;
}
public Integer getPushEnableMp4() {
return pushEnableMp4;
}
public void setPushEnableMp4(Integer pushEnableMp4) {
this.pushEnableMp4 = pushEnableMp4;
}
public Integer getFileSecond() {
return fileSecond;
}
public void setFileSecond(Integer fileSecond) {
this.fileSecond = fileSecond;
}
public Integer getFileKeepMaxTime() {
return fileKeepMaxTime;
}
public void setFileKeepMaxTime(Integer fileKeepMaxTime) {
this.fileKeepMaxTime = fileKeepMaxTime;
}
public Integer getHttpDownloadSpeed() {
return httpDownloadSpeed;
}
public void setHttpDownloadSpeed(Integer httpDownloadSpeed) {
this.httpDownloadSpeed = httpDownloadSpeed;
}
public Integer getRecordReplayThread() {
return RecordReplayThread;
}
public void setRecordReplayThread(Integer recordReplayThread) {
RecordReplayThread = recordReplayThread;
}
public Integer getConvertMaxObject() {
return convertMaxObject;
}
public void setConvertMaxObject(Integer convertMaxObject) {
this.convertMaxObject = convertMaxObject;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getRecordPath() {
return recordPath;
}
public void setRecordPath(String recordPath) {
this.recordPath = recordPath;
}
public String getPicturePath() {
return picturePath;
}
public void setPicturePath(String picturePath) {
this.picturePath = picturePath;
}
public Integer getNoneReaderDuration() {
return noneReaderDuration;
}
public void setNoneReaderDuration(Integer noneReaderDuration) {
this.noneReaderDuration = noneReaderDuration;
}
public String getOnServerStarted() {
return onServerStarted;
}
public void setOnServerStarted(String onServerStarted) {
this.onServerStarted = onServerStarted;
}
public String getOnServerKeepalive() {
return onServerKeepalive;
}
public void setOnServerKeepalive(String onServerKeepalive) {
this.onServerKeepalive = onServerKeepalive;
}
public String getOnPlay() {
return onPlay;
}
public void setOnPlay(String onPlay) {
this.onPlay = onPlay;
}
public String getOnPublish() {
return onPublish;
}
public void setOnPublish(String onPublish) {
this.onPublish = onPublish;
}
public String getOnStreamArrive() {
return onStreamArrive;
}
public void setOnStreamArrive(String onStreamArrive) {
this.onStreamArrive = onStreamArrive;
}
public String getOnStreamNotArrive() {
return onStreamNotArrive;
}
public void setOnStreamNotArrive(String onStreamNotArrive) {
this.onStreamNotArrive = onStreamNotArrive;
}
public String getOnStreamNoneReader() {
return onStreamNoneReader;
}
public void setOnStreamNoneReader(String onStreamNoneReader) {
this.onStreamNoneReader = onStreamNoneReader;
}
public String getOnStreamDisconnect() {
return onStreamDisconnect;
}
public void setOnStreamDisconnect(String onStreamDisconnect) {
this.onStreamDisconnect = onStreamDisconnect;
}
public String getOnDeleteRecordMp4() {
return onDeleteRecordMp4;
}
public void setOnDeleteRecordMp4(String onDeleteRecordMp4) {
this.onDeleteRecordMp4 = onDeleteRecordMp4;
}
public String getOnRecordProgress() {
return onRecordProgress;
}
public void setOnRecordProgress(String onRecordProgress) {
this.onRecordProgress = onRecordProgress;
}
public String getOnRecordTs() {
return onRecordTs;
}
public void setOnRecordTs(String onRecordTs) {
this.onRecordTs = onRecordTs;
}
public Integer getEnableGetFileDuration() {
return enableGetFileDuration;
}
public void setEnableGetFileDuration(Integer enableGetFileDuration) {
this.enableGetFileDuration = enableGetFileDuration;
}
public Integer getKeepaliveDuration() {
return keepaliveDuration;
}
public void setKeepaliveDuration(Integer keepaliveDuration) {
this.keepaliveDuration = keepaliveDuration;
}
public Integer getCaptureReplayType() {
return captureReplayType;
}
public void setCaptureReplayType(Integer captureReplayType) {
this.captureReplayType = captureReplayType;
}
public Integer getVideoFileFormat() {
return videoFileFormat;
}
public void setVideoFileFormat(Integer videoFileFormat) {
this.videoFileFormat = videoFileFormat;
}
public Integer getMaxDiconnectTimeoutSecond() {
return maxDiconnectTimeoutSecond;
}
public void setMaxDiconnectTimeoutSecond(Integer maxDiconnectTimeoutSecond) {
this.maxDiconnectTimeoutSecond = maxDiconnectTimeoutSecond;
}
public Integer getG711ConvertAAC() {
return g711ConvertAAC;
}
public void setG711ConvertAAC(Integer g711ConvertAAC) {
this.g711ConvertAAC = g711ConvertAAC;
}
public Integer getFilterVideoEnable() {
return filterVideoEnable;
}
public void setFilterVideoEnable(Integer filterVideoEnable) {
this.filterVideoEnable = filterVideoEnable;
}
public String getFilterVideoText() {
return filterVideoText;
}
public void setFilterVideoText(String filterVideoText) {
this.filterVideoText = filterVideoText;
}
public Integer getFilterFontSize() {
return filterFontSize;
}
public void setFilterFontSize(Integer filterFontSize) {
this.filterFontSize = filterFontSize;
}
public String getFilterFontColor() {
return filterFontColor;
}
public void setFilterFontColor(String filterFontColor) {
this.filterFontColor = filterFontColor;
}
public Integer getFilterFontLeft() {
return filterFontLeft;
}
public void setFilterFontLeft(Integer filterFontLeft) {
this.filterFontLeft = filterFontLeft;
}
public Integer getFilterFontTop() {
return filterFontTop;
}
public void setFilterFontTop(Integer filterFontTop) {
this.filterFontTop = filterFontTop;
}
public Double getFilterFontAlpha() {
return filterFontAlpha;
}
public void setFilterFontAlpha(Double filterFontAlpha) {
this.filterFontAlpha = filterFontAlpha;
}
public Integer getConvertOutWidth() {
return convertOutWidth;
}
public void setConvertOutWidth(Integer convertOutWidth) {
this.convertOutWidth = convertOutWidth;
}
public Integer getConvertOutHeight() {
return convertOutHeight;
}
public void setConvertOutHeight(Integer convertOutHeight) {
this.convertOutHeight = convertOutHeight;
}
public Integer getConvertOutBitrate() {
return convertOutBitrate;
}
public void setConvertOutBitrate(Integer convertOutBitrate) {
this.convertOutBitrate = convertOutBitrate;
}
public Integer getFlvPlayAddMute() {
return flvPlayAddMute;
}
public void setFlvPlayAddMute(Integer flvPlayAddMute) {
this.flvPlayAddMute = flvPlayAddMute;
}
public Integer getGb28181LibraryUse() {
return gb28181LibraryUse;
}
public void setGb28181LibraryUse(Integer gb28181LibraryUse) {
this.gb28181LibraryUse = gb28181LibraryUse;
}
public String getRtcListeningIp() {
return rtcListeningIp;
}
public void setRtcListeningIp(String rtcListeningIp) {
this.rtcListeningIp = rtcListeningIp;
}
public Integer getRtcListeningIpPort() {
return rtcListeningIpPort;
}
public void setRtcListeningIpPort(Integer rtcListeningIpPort) {
this.rtcListeningIpPort = rtcListeningIpPort;
}
public String getRtcExternalIp() {
return rtcExternalIp;
}
public void setRtcExternalIp(String rtcExternalIp) {
this.rtcExternalIp = rtcExternalIp;
}
public String getRtcRealm() {
return rtcRealm;
}
public void setRtcRealm(String rtcRealm) {
this.rtcRealm = rtcRealm;
}
public String getRtcUser() {
return rtcUser;
}
public void setRtcUser(String rtcUser) {
this.rtcUser = rtcUser;
}
public Integer getRtcMinPort() {
return rtcMinPort;
}
public void setRtcMinPort(Integer rtcMinPort) {
this.rtcMinPort = rtcMinPort;
}
public Integer getRtcMaxPort() {
return rtcMaxPort;
}
public void setRtcMaxPort(Integer rtcMaxPort) {
this.rtcMaxPort = rtcMaxPort;
}
public String getOnRecordMp4() {
return onRecordMp4;
}
public void setOnRecordMp4(String onRecordMp4) {
this.onRecordMp4 = onRecordMp4;
}
public Integer getPictureMaxCount() {
return pictureMaxCount;
}
public void setPictureMaxCount(Integer pictureMaxCount) {
this.pictureMaxCount = pictureMaxCount;
}
public String getOnStreamNotFound() {
return onStreamNotFound;
}
public void setOnStreamNotFound(String onStreamNotFound) {
this.onStreamNotFound = onStreamNotFound;
}
}

View File

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

View File

@@ -14,10 +14,14 @@ import java.util.Map;
public interface IMediaNodeServerService {
int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode);
void closeRtpServer(MediaServer mediaServer, String streamId);
void closeRtpServer(MediaServer mediaServer, String streamId, CommonCallback<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);
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);
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);
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.util.ObjectUtils;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.*;
@@ -214,6 +215,27 @@ public class MediaServerServiceImpl implements IMediaServerService {
return rtpServerPort;
}
@Override
public SSRCInfo openJTTServer(MediaServer mediaServer, @NotNull String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) {
if (mediaServer == null || mediaServer.getId() == null) {
log.info("[openJTTServer] 失败, mediaServer == null || mediaServer.getId() == null");
return null;
}
int rtpServerPort;
if (mediaServer.isRtpEnable()) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType());
if (mediaNodeServerService == null) {
log.info("[openJTTServer] 失败, mediaServer的类型 {},未找到对应的实现类", mediaServer.getType());
return null;
}
rtpServerPort = mediaNodeServerService.createJTTServer(mediaServer, streamId, port, disableVideo, disableAudio, tcpMode);
} else {
rtpServerPort = mediaServer.getJttProxyPort();
}
return new SSRCInfo(rtpServerPort, null, "1078", streamId, null);
}
@Override
public List<String> listRtpServer(MediaServer mediaServer) {
IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType());
@@ -234,7 +256,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
log.info("[closeRTPServer] 失败, mediaServer的类型 {},未找到对应的实现类", mediaServer.getType());
return;
}
mediaNodeServerService.closeRtpServer(mediaServer, streamId);
mediaNodeServerService.closeRtpServer(mediaServer, streamId, null);
}
@Override
@@ -268,6 +290,20 @@ public class MediaServerServiceImpl implements IMediaServerService {
mediaNodeServerService.closeStreams(mediaServer, "rtp", streamId);
}
@Override
public void closeJTTServer(MediaServer mediaServer, String streamId, CommonCallback<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
public Boolean updateRtpServerSSRC(MediaServer mediaServer, String streamId, String ssrc) {
if (mediaServer == null) {

View File

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

View File

@@ -99,7 +99,7 @@ public class MediaServiceImpl implements IMediaService {
@Override
public ResultForOnPublish authenticatePublish(MediaServer mediaServer, String app, String stream, String params) {
// 推流鉴权的处理
if (!"rtp".equals(app)) {
if (!"rtp".equals(app) && !"1078".equals(app) ) {
if ("talk".equals(app) && stream.endsWith("_talk")) {
ResultForOnPublish result = new ResultForOnPublish();
result.setEnable_mp4(false);

View File

@@ -23,6 +23,7 @@ public interface MediaServerMapper {
"rtmp_port,"+
"rtmp_ssl_port,"+
"rtp_proxy_port,"+
"jtt_proxy_port,"+
"rtsp_port,"+
"flv_port," +
"flv_ssl_port," +
@@ -91,6 +92,7 @@ public interface MediaServerMapper {
"<if test=\"rtmpPort != null\">, rtmp_port=#{rtmpPort}</if>" +
"<if test=\"rtmpSSlPort != null\">, rtmp_ssl_port=#{rtmpSSlPort}</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=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</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=\"rtmpSSlPort != null\">, rtmp_ssl_port=#{rtmpSSlPort}</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=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</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)
);