文章目录
- 一、JT/T 1078 协议基本介绍
- 二、JT/T 1078 与 JT808 的关系
- 三、JT1078 协议核心功能
- 四、JT1078 数据结构概览
- 4.1、消息结构:
- 4.2、消息类型(部分):
- 五、Java 中如何解析 JT1078 协议数据?
- 5.1、JT1078 消息 ID 对照表
- 5.2、消息分类
- 5.3、伪代码结构
- 六、JT1078 常见视频参数
- 七、和 GB/T 28181 的区别?
- 八、Java 示例代码( JT1078 协议中的实时视频传输请求)
- 8.1、解析 0x9101 消息体
- 8.2、示例原始数据(十六进制)
- 8.3、使用方式
1078 协议,全称为 《JT/T 1078-2016 道路运输车辆视频通信协议》,是配合 JT808(车辆定位协议) 使用的,用于 道路运输车辆视频监控和传输。它是 中国车载视频传输的国家/行业标准协议。
一、JT/T 1078 协议基本介绍
项目 | 内容 |
---|---|
标准名称 | JT/T 1078-2016 道路运输车辆视频通信协议 |
发布单位 | 中华人民共和国交通运输部 |
发布时间 | 2016年12月 |
实施时间 | 2017年7月1日 |
主要功能 | 视频传输、音频传输、远程控制、录像回放、抓拍、音视频实时流管理等 |
应用场景 | 校车、危化品运输、客运车辆、营运车辆监管系统 |
二、JT/T 1078 与 JT808 的关系
-
JT808 负责基础通信、定位、调度、报警等功能
-
JT1078 负责车载视频音频的传输、控制与回放
-
JT1078 依附于 JT808 协议,通过 JT808 的消息转发机制进行音视频数据的交互
三、JT1078 协议核心功能
功能 | 描述 |
---|---|
实时视频预览 | 视频通道(最多4个/8个),实时流拉取 |
远程录像回放 | 指定时间段、通道、文件类型进行录像回放 |
抓拍控制 | 远程触发抓拍并上传图片 |
音频监听 | 开启远程麦克风监听通话 |
语音对讲 | 远程向车内广播语音 |
视频流参数设置 | 分辨率、码率、帧率、编码格式 |
音视频通道管理 | 多路通道(如前后摄像头、行车记录仪)状态管理 |
四、JT1078 数据结构概览
4.1、消息结构:
| 起始标识 0x7E | 消息头 | 消息体 | 校验码 | 结束标识 0x7E |
4.2、消息类型(部分):
消息 ID (十六进制) | 名称 |
---|---|
0x9101 | 实时音视频传输请求 |
0x9102 | 音视频实时传输控制 |
0x9201 | 远程录像回放请求 |
0x9202 | 文件上传请求 |
0x9301 | 抓拍指令 |
五、Java 中如何解析 JT1078 协议数据?
根据《JT/T 1078-2016》的协议文档来写每个消息体的解析规则。
5.1、JT1078 消息 ID 对照表
消息 ID | 消息方向 | 名称描述 |
---|---|---|
0x9101 | 平台 → 终端 | 实时音视频传输请求 |
0x9102 | 平台 → 终端 | 实时音视频传输控制指令 |
0x9103 | 平台 → 终端 | 关闭音视频通道请求 |
0x9201 | 平台 → 终端 | 音视频回放请求 |
0x9202 | 平台 → 终端 | 回放控制指令 |
0x9203 | 平台 → 终端 | 文件上传请求 |
0x9204 | 平台 → 终端 | 文件上传控制 |
0x9205 | 平台 → 终端 | 查询音视频资源列表 |
0x9301 | 平台 → 终端 | 抓拍指令 |
0x9302 | 平台 → 终端 | 抓拍立即上传命令 |
0x1003 | 终端 → 平台 | 上传音视频资源目录 |
0x1005 | 终端 → 平台 | 文件上传完成通知 |
0x1001 | 终端 → 平台 | 实时音视频数据上报 |
0x1002 | 终端 → 平台 | 音视频事件通知 |
0x1004 | 终端 → 平台 | 文件上传数据包 |
0x1006 | 终端 → 平台 | 音视频数据检索应答 |
0x1007 | 终端 → 平台 | 终端主动上传抓拍 |
0x1008 | 终端 → 平台 | 终端上传通道参数(通道列表)
5.2、消息分类
🟢 控制类(平台下发):0x910x / 0x920x / 0x930x
🔵 数据类(终端上报):0x100x
🟡 文件传输/列表类:0x9203, 0x9205, 0x1003, 0x1004
5.3、伪代码结构
由于 JT1078 与 JT808 格式类似,可以 基于 JT808 的框架结构进行消息类型识别和扩展处理。
伪代码结构如下:
public void handleJT1078Message(byte[] packet) {int msgId = getMessageId(packet); // 解析消息 IDswitch (msgId) {case 0x9101:handleRealTimeVideoRequest(packet);break;case 0x9201:handlePlaybackRequest(packet);break;case 0x9301:handleSnapshotRequest(packet);break;default:System.out.println("未知 JT1078 消息类型");}
}
说明
JT1078 基于 JT808 协议扩展,依赖 JT808 的消息头和校验机制。
所有音视频数据采用 UDP/RTP 推流(如实时视频),也可以按文件方式传输(回放/抓拍)。
六、JT1078 常见视频参数
参数 | 示例 |
---|---|
分辨率 | 1920x1080、1280x720 |
视频编码 | H.264、H.265 |
音频编码 | G.711、AAC |
码率 | 500~3000 kbps |
帧率 | 15~30 fps |
七、和 GB/T 28181 的区别?
协议 | 特点 |
---|---|
JT/T 1078 | 专为交通运输车辆制定,依托 JT808 |
GB/T 28181 | 公安视频监控专用协议,基于 SIP 和 RTP,更接近国标平台 |
八、Java 示例代码( JT1078 协议中的实时视频传输请求)
下面是一份用于解析 JT1078 协议中的实时视频传输请求(消息ID 0x9101) 的 Java 示例代码。此示例假设你已经具备基础的 JT808 数据结构解析能力(如消息头、校验、分包等解析能力)。
8.1、解析 0x9101 消息体
public class Msg9101 {private int logicalChannelNo; // 逻辑通道号private int mediaType; // 音视频类型private int streamType; // 码流类型(主/子)private int storageType; // 存储器类型private int playbackMode; // 回放方式(实时0/回放1)private int playbackSpeed; // 播放速度private String serverIp; // 服务端 IPprivate int serverTcpPort; // TCP 端口private int serverUdpPort; // UDP 端口public static Msg9101 parse(byte[] body) throws UnsupportedEncodingException {ByteBuffer buffer = ByteBuffer.wrap(body);Msg9101 msg = new Msg9101();byte ipLength = buffer.get(); // IP地址长度byte[] ipBytes = new byte[ipLength];buffer.get(ipBytes);msg.serverIp = new String(ipBytes, "GBK");msg.serverTcpPort = buffer.getShort() & 0xFFFF;msg.serverUdpPort = buffer.getShort() & 0xFFFF;msg.logicalChannelNo = buffer.get() & 0xFF;msg.mediaType = buffer.get() & 0xFF;msg.streamType = buffer.get() & 0xFF;msg.storageType = buffer.get() & 0xFF;msg.playbackMode = buffer.get() & 0xFF;msg.playbackSpeed = buffer.get() & 0xFF;return msg;}@Overridepublic String toString() {return "Msg9101{" +"serverIp='" + serverIp + '\'' +", serverTcpPort=" + serverTcpPort +", serverUdpPort=" + serverUdpPort +", logicalChannelNo=" + logicalChannelNo +", mediaType=" + mediaType +", streamType=" + streamType +", storageType=" + storageType +", playbackMode=" + playbackMode +", playbackSpeed=" + playbackSpeed +'}';}
}
8.2、示例原始数据(十六进制)
hex
0C3139322E3136382E312E3130 1F90 1F91 01 00 00 01 00 01
字段 | 含义 |
---|---|
0C | IP长度 12 |
313932…3130 | IP地址192.168.1.10 |
1F90 | TCP端口8080 |
1F91 | UDP端口8081 |
01 | 逻辑通道号 |
00 | 媒体类型:视频 |
00 | 码流类型:主码流 |
01 | 存储类型:实时 |
00 | 播放模式:实时 |
01 | 播放速度:1倍速 |
8.3、使用方式
byte[] data = ...; // 从JT808协议消息中提取的 9101 消息体部分
Msg9101 msg = Msg9101.parse(data);
System.out.println(msg);
樱花明白自己终将零落,
依然要盛放得轰轰烈烈。
人与人之间最动人的部分,
有时恰恰存在于期限明确的相遇里——
因为没有来日方长的侥幸,
所以每个瞬间都被赋予钻石般的密度。