视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享
目录
一、JT/T 808标准简介
(一)概述
(二)协议特点
1、通信方式
2、鉴权机制
3、消息分类
(三)协议主要内容
1、位置信息
2、报警信息
3、车辆控制
4、数据转发
二、代码和解释
(一)代码和注释
(二)代码解释
1、概述
2、包含的目录和库
3、 宏定义
4、结构体定义
5、类定义(`CJT808NetSDKAPI`)
6、 静态变量和函数
7、成员变量
一、JT/T 808标准简介
(一)概述
JT/T 808标准,全称为《道路运输车辆卫星定位系统终端通讯协议及数据格式》,是由国家交通运输部发布的一个重要标准。这个标准主要规定了道路运输车辆卫星定位系统车载终端与监控平台之间的通信协议,包括信息交换的格式、数据的加密传输、报警信息的处理等,为车辆监管和服务提供了统一的数据通信标准,实现了信息的快速传输和远程控制。

(二)协议特点
1、通信方式
采用TCP协议作为通信协议,确保数据传输的稳定性和可靠性。
2、鉴权机制
车载终端与监控平台之间建立了鉴权机制,确保通信双方的身份合法性。
3、消息分类
将不同功能的消息分为不同的消息类别,如位置信息汇报、报警信息上传、车辆控制等,每个消息类别都有独特的消息ID。
(三)协议主要内容
1、位置信息
JT/T808标准定义了采集车辆位置信息的方式和格式,如经纬度、速度、方向等,并规定了位置信息上报的频率和条件。
2、报警信息
标准中定义了不同类型的报警信息,如超速报警、紧急报警等,并规定了报警信息的上报和处理方式。
3、车辆控制
标准还规定了终端对车辆某些功能的控制,如车辆远程锁车、解锁等。
4、数据转发
定义了终端之间的数据转发方式,允许终端之间相互通信。
二、代码和解释
(一)代码和注释
以下部分C++代码是JT808标准接入视频监控平台的SDK代码的头文件,列出了相关的函数,具体如下:
// JT808_NET_SDK_API_H__ header file/* * 定义CJT808NetSDKAPI类,该类用于处理JT808协议的网络通信。* JT808是一种中国制定的车辆监控通信协议。* 本类封装了网络通信的功能,包括登录/登出、数据接收/发送、线程处理等。*/#ifndef __JT808_NET_SDK_API_H__
#define __JT808_NET_SDK_API_H__// 包含标准目录遍历类
#include <dirent.h>
// 引入STL中的map和list容器
#include <map>
#include <list>// 引入自定义的NetSdkApp类,用于处理网络相关应用逻辑
#include "NetSdkApp.h"
// 引入类型定义
#include "TypeDef.h"
// 引入JT808协议相关定义
#include "jt808.h"
// 引入消息中心,用于处理各种消息
#include "MsgCenter.h"// 引入线程相关的类和定义
#include "jthread.h"
#include "TransportMgr.h"
#include "TcpServer.h"// 引入JT808常量定义
#include "JT808Constant.h"
// 可能引入JT808流处理类,但此行被注释掉了
// #include "JT808Stream.h"// 使用命名空间jthread,以便于使用线程相关的类和函数
using namespace jthread;// 定义最大缓存大小
#define JT808_CACHE_MAX_SIZE 1024*2// 定义一个结构体用于缓存接收到的数据
typedef struct _Jt808RecvCache
{// 指向缓存的指针UINT8 *pCache;// 缓存的最大大小int iCacheSize;// 当前缓存的大小int iCurCacheSize;// 结构体的构造函数,初始化成员变量_Jt808RecvCache(){pCache = NULL;iCacheSize = JT808_CACHE_MAX_SIZE;iCurCacheSize = 0;}
}Jt808RecvCache;// CJT808NetSDKAPI类声明
class CJT808NetSDKAPI: public JThread, public CTransportMgr
{
public:// 构造函数和析构函数CJT808NetSDKAPI();~CJT808NetSDKAPI();// 初始化方法void Init(void);// 清理方法void Unit(void);// 登录方法,传入服务器IP和端口long Login(const char *ip, UINT16 port);// 登出方法,传入登录IDvoid Logout(long Loginid);// 线程执行方法void* Thread(void);// 线程退出方法void ThreadQuit(void);// 从网络接收数据的接口int RecvDataFromNetwork(void);// 向网络发送数据的接口int SendDataToNetwork(void);// 回调函数,处理接收到的数据包int RecvPacketCallBack(CMySocket *pMySocket, const char *pData, int len, char *pSrcIP, UINT16 SrcPort);// 回调函数,处理TCP套接字异常int TcpSockExceptionCallBack(CMySocket *pMySocket);// 处理接收到的消息int MsgProcess(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, char* pBodyData, int BodyLen);// 构造基础响应消息int MsgBaseRsp(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, WORD MsgType, char * pRspData, int DataLen);// 构造通用响应消息int MsgCommonRsp(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, int RetCode);// 构造基础请求消息int MsgBaseReq(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, WORD MsgType, char * pRspData, int DataLen);// 构造实时播放请求消息int RealPlayReq(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, int ChanID);private:// 静态变量和互斥锁,用于管理JT808索引static int jt808Index;static CCritSec CritSec_jt808Index;int JT808IndexAdd(){CAutoLock AutoLock(&CritSec_jt808Index);return ++jt808Index;}private: // 本地主机IP地址和端口,用于RTSPchar MyIpAddr[IPSTR_MAX_LEN+4];UINT16 MyPort; // 进程退出标志bool ExitFlag; // TCP服务器对象CTcpServer *pTcpSvr; // 暂时先使用一个Jt808RecvCache *m_pStack;};// 文件结束宏
#endif /* INSTRUCTCONVERT_H_ */
(二)代码解释
1、概述
头文件定义了一个名为`CJT808NetSDKAPI`的比较复杂的类,该类继承了`JThread`和`CTransportMgr`两个接口。
该文件是用于处理JT808协议的网络通信的SDK(软件开发工具包),包括数据接收、发送、处理和缓存管理等。类也包含了许多网络通信的方法,如登录、登出、数据接收和发送等。它还包含了一些回调函数,用于处理接收到的数据包和TCP套接字异常。此外,它还定义了一些静态变量和互斥锁,用于管理JT808索引。
具体解释如下所述。
2、包含的目录和库
- `#include <dirent.h>`:用于目录操作。
- `#include <map>` 和 `#include <list>`:用于标准模板库中的映射和列表数据结构。
- `#include "NetSdkApp.h"`:可能是网络应用相关的头文件。
- `#include "TypeDef.h"`:包含类型定义的头文件。
- `#include "jt808.h"`:JT808协议相关的定义。
- `#include "MsgCenter.h"`:消息中心的定义。
- `#include "jthread.h"`:可能是自定义的线程类。
- `#include "TransportMgr.h"`:传输管理类的定义。
- `#include "TcpServer.h"`:TCP服务器类的定义。
- `#include "JT808Constant.h"`:JT808常量定义。
3、 宏定义
- `#define JT808_CACHE_MAX_SIZE 1024*2`:
定义了接收缓存的最大大小为2KB。
4、结构体定义
- `typedef struct _Jt808RecvCache Jt808RecvCache;`:
定义了一个用于接收缓存的结构体。
5、类定义(`CJT808NetSDKAPI`)
- 这个类继承了`JThread`和`CTransportMgr`,这意味着它具有线程功能和传输管理功能。
- 类中定义了多个成员函数,包括初始化、清理、登录、登出、接收网络数据、发送网络数据等。
- 还有回调函数,如接收数据包回调和TCP套接字异常回调。
- 成员函数`MsgProcess`用于处理消息,`MsgBaseRsp`和`MsgCommonRsp`用于发送基础响应和通用响应,`MsgBaseReq`用于发送基础请求,`RealPlayReq`用于实况播放请求。
6、 静态变量和函数
- `static int jt808Index;` 和 `static CCritSec CritSec_jt808Index;`:
用于管理JT808索引的静态变量和互斥锁。
- `static int JT808IndexAdd()`:
一个静态函数,用于增加JT808索引。
7、成员变量
- `char MyIpAddr[IPSTR_MAX_LEN+4];` 和 `UINT16 MyPort;`:本地IP地址和端口。
- `bool ExitFlag;`:进程退出标志。
- `CTcpServer *pTcpSvr;`:TCP服务器对象指针。
- `Jt808RecvCache *m_pStack;`:接收缓存堆栈。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。
相关文章:
视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享
目录 一、JT/T 808标准简介 (一)概述 (二)协议特点 1、通信方式 2、鉴权机制 3、消息分类 (三)协议主要内容 1、位置信息 2、报警信息 3、车辆控制 4、数据转发 二、代码和解释 (一…...
【C++】多态 — 多态的细节补充(下篇)
前言: 我们学习了多态的形式和如何使用多态,这一章我们将来讲一讲多态的原理… 目录 动态绑定与静态绑定: 动态绑定与静态绑定: 静态绑定又称为前期绑定(早绑定),在程序编译期间确定了程序的行为,也称为静态多态,比如…...
系统安全与应用【2】
1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。 实例&…...
EtherCAT总线速度轴控制功能块(COSESYS ST源代码)
测试环境为汇川PLC,型号 AM402-CPU1608TP、伺服驱动器为禾川X3E,具体通信配置可以参考下面文章链接: 1、使能和点动控制 汇川AM400PLC通过EtherCAT总线控制禾川X3E伺服使能和点动控制-CSDN博客文章浏览阅读31次。进行通信之前需要安装禾川X3E的XML文件,具体方法如下:1、汇…...
【码银送书第十九期】《图算法:行业应用与实践》
作者:嬴图团队 01 前言 在当今工业领域,图思维方式与图数据技术的应用日益广泛,成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考,不仅促进业界爱好者之间的交流,…...
无监督式学习
1.是什么? 无监督式学习与监督式学习**最大的区别就是:**没有事先给定的训练实例,它是自动对输入的示例进行分类或者分群; 优点:不需要标签数据,极大程度上扩大了我们的数据样本,其次不受监督信…...
docker 安装镜像及使用命令
目录 1. Mysql2. Redis3. Nginx4. Elasticsearch官网指导 docker pull 容器名:版本号 拉取容器, 不指定版本号默认最新的 run 运行 -d 后台运行 -p 3306:3306 -p是port 对外端口:对内端口 –name xyy_mysql 容器名称 -e MYSQL_ROOT_PASSWORD123456 环境变量 -v 系统地址:docker…...
Python运维之多进程!!
本节的快速导航目录如下喔!!! 一、创建进程的类Process 二、进程并发控制之Semaphore 三、进程同步之Lock 四、进程同步之Event 五、进程优先队列Queue 六、多进程之进程池Pool 七、多进程之数据交换Pipe 一、创建进程的类Process mu…...
Redis(无中心化集群搭建)
文章目录 1.无中心化集群1.基本介绍2.集群说明 2.基本环境搭建1.部署规划(6台服务器)2.首先删除上次的rdb和aof文件(对之前的三台服务器都操作)1.首先分别登录命令行,关闭redis2.清除/root/下的rdb和aof文件3.把上次的…...
基于springboot+jsp+Mysql的商务安全邮箱邮件收发
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
三.Django--ORM(操作数据库)
目录 1 什么是ORM 1.1 ORM优势 1.2ORM 劣势 1.3 ORM与数据库的关系 2 ORM 2.1 作用 2.2 连接数据库 2.3 表操作--设置字段 2.4 数据库的迁移 写路由增删改查操作 项目里的urls.py: app里的views.py: 注意点: 1 什么是ORM ORM中文---对象-关系映射 在MTV,MVC设计…...
【华为】AC直连二层组网隧道转发实验配置
【华为】AC直连二层组网隧道转发实验配置 实验需求拓扑配置AC数据规划表 AC的配置顺序AC1基本配置(二层通信)AP上线VAP组关联--WLAN业务流量 LSW1AR1STA获取AP的业务流量 配置文档 实验需求 AC组网方式:直连二层组网。 业务数据转发方式:隧道转发。 DHC…...
第 129 场 LeetCode 双周赛题解
A 构造相同颜色的正方形 枚举:枚举每个 3 3 3\times 3 33的矩阵,判断是否满足条件 class Solution {public:bool canMakeSquare(vector<vector<char>>& grid) {for (int i 0; i < 2; i)for (int j 0; j < 2; j) {int c1 0, c…...
GStreamer日志调试笔记
1、查询所有分类 #gst-launch-1.0 --gst-debug-help 2、查询videotestsrc的日志 #gst-launch-1.0 --gst-debug-help | findstr videotestsrc 结果: 3、使用--gst-debug设置相应日志类型的相应等级,越大显示日志越多,排查内存泄露可以设置为9 …...
【api接口开通教程】YouTube Data API v3申请流程
一、背景调查 1.1 API接口介绍 采集youtube数据,大体分为两种方案:一种是基于爬虫,一种是基于API接口。 说人话就是:爬虫相当于走后门、爬窗户(利用技术手段窃取,人家没说给,但我硬拿&#x…...
.net 6.0 框架集成ef实战,步骤详解
一、代码框架搭建 搭建如下代码架构: 重点含EntityFrameworkCore工程,该工程中包含AppDbContext.cs和数据表实体AggregateObject 1、AppDbContext 代码案例 //AppDbContext 代码案例using Microsoft.EntityFrameworkCore;namespace EntityFrameworkCo…...
[C/C++] -- 观察者模式
观察者模式是一种行为型设计模式,用于定义对象间的一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式涉及以下几个角色: 主题(Subject)&…...
秋招算法刷题8
20240422 2.两数相加 时间复杂度O(max(m,n)),空间复杂度O(1) public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode headnull,tailnull;int carry0;while(l1!null||l2!null){int n1l1!null?l1.val:0;int n2l2!…...
Docker使用方法
Docker是一种容器化平台,它可以帮助开发人员将应用程序和其依赖项打包成一个独立的、可移植的容器,以便在不同的环境中运行。 以下是使用Docker的基本步骤: 安装Docker:首先,您需要在您的机器上安装Docker。您可以从D…...
HTML学习|网页基本信息、网页基本标签、图像标签、超链接标签、列表标签、表格标签、媒体元素、页面结构分析、iframe内联框架
网页基本信息 DOCTYPE是设置使用什么规范,网页整个信息都在html标签中,head标签里包含字符集设置,网页介绍等信息,title标签是网页的名称,网页的主干都在body标签中 网页基本标签 标题标签 h1~h6都是标题标签&#x…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
