“两客一危一重货”车辆运输安全是当前道路运输安全管理工作的重中之重,相应的车辆GPS定位监控平台是监控“两客一危一重货”车辆运输安全的重要平台。本系统结合交通部JT808、JT1078等协议标准,提供Java开发车载视频定位监控系统的开发思路。
一:JT808协议解析和服务器搭建。
JT808协议分为2011版、2013版、2019版本。市面上大多是2013版,少数2019版。2013和2019版本的最大区别是报文固定头部把手机号从原来的6字节BCD码改成了10字节BCD码。
2013版报文头:
2019版报文头:
对于TCP报文的解析,消息头可以使用公共组件,通过版本标记解析不同版本的消息头。消息体用每个消息自定义的解析格式。
public abstract class JTMessage {
protected String msgId;//消息编号
protected String tid;//终端ID
protected String msgNo;//消息流水
protected int version;//版本号
protected int isPack;//分包
解析报文头:
//解析报文头
ReadByteFromHex reader = new ReadByteFromHex(msg);
//=============解析消息头开始=============
reader.readByte(1);// 7E
String msgId = reader.readByte(2);// 消息id
String msgBodyAttr = reader.readByte(2);// 消息体属性
int msgBodyInt = Integer.parseInt(msgBodyAttr, 16);
boolean isVersion = (msgBodyInt & 0x4000) > 0;// 是否有版本号 取第13位是否为1 0x4000二进制是0100000000000000
int version = 0; //2019版本开始从1递增
if (isVersion) {
version = Integer.parseInt(reader.readByte(1), 16); // 版本号
}
//如果版本号大于0 则手机号为10位
String tid = version > 0 ? reader.readByte(10) : reader.readByte(6);// 手机号,当做id
String msgNo = reader.readByte(2);// 消息流水
// 是否分包
boolean isPack = (msgBodyInt & 0x2000) > 0;// 是否分包 取第13位是否为1 0x2000二进制是0010000000000000
int packTotal = 0;
int packNum = 0;
if (isPack) {
// 如果有分包则多读4个字节
packTotal = Integer.parseInt(reader.readByte(2), 16);
packNum = Integer.parseInt(reader.readByte(2), 16);
}
boolean isRSA = (msgBodyInt & 0x400) > 0;// 消息体是否过RSA算法加密; 取第13位是否为1 0x400二进制是0000010000000000
//=============解析消息头结束=============
解析消息体:
//=============解析消息体开始=============
String bodyHex = reader.readByte(msgBodyInt & 0x3ff); // 消息体属性前10位是消息体长度 0x3ff二进制是0000001111111111
if ("0200".equals(msgId)) {//位置上报
JTMessage t0200 = new T0200(tid, msgNo);
t0200.decodeBody(bodyHex);
return t0200;
} else if ("0002".equals(msgId)) {//心跳
JTMessage t0202 = new T0002(tid, msgNo);
t0202.decodeBody(bodyHex);
return t0202;
} else if ("0003".equals(msgId)) {//注销
JTMessage t0003 = new T0003(tid, msgNo);
t0003.decodeBody(bodyHex);
return t0003;
} else if ("0100".equals(msgId)) {//注册
JTMessage t0100 = new T0100(tid, msgNo);
t0100.decodeBody(bodyHex);
return t0100;
} else if ("0102".equals(msgId)) {//鉴权
JTMessage t0102 = new T0102(tid, msgNo);
t0102.decodeBody(bodyHex);
return t0102;
} else if ("0001".equals(msgId)) {//终端通用应答
JTMessage t0001 = new T0001(tid, msgNo);
t0001.decodeBody(bodyHex);
return t0001;
} else if ("0704".equals(msgId)) {//定位数据批量上传
JTMessage t0704 = new T0704(tid, msgNo);
t0704.decodeBody(bodyHex);
return t0704;
}
//=============解析消息体结束=============
二、设备上报流程:
注意,设备数据大批量上报的情况下,服务器需要支持高并发,netty作为天然的高并发框架,可以用作JT808服务器的接入点。
三、JT1078服务器的搭建流程:
1078服务器就是一个流媒体服务器,要处理的功能是接收设备上报的视频数据,解析成浏览器能够播放的格式,并通过websocket或者http协议发送到浏览器,浏览器解码观看视频。
文章来源:https://www.toymoban.com/news/detail-499965.html
下面是系统demo演示地址:gps.cachtek.com文章来源地址https://www.toymoban.com/news/detail-499965.html
到了这里,关于Java实现符合交通部标JT808和JT1078协议服务器的思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!