文章目錄
- 一、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);
櫻花明白自己終將零落,
依然要盛放得轟轟烈烈。
人與人之間最動人的部分,
有時恰恰存在于期限明確的相遇里——
因為沒有來日方長的僥幸,
所以每個瞬間都被賦予鉆石般的密度。