视频监控平台:交通运输标准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…...
001 websocket(评论功能demo)(消息推送)
文章目录 ReviewController.javaWebSocketConfig.javaWebSocketProcess.javaServletInitializer.javaWebsocketApplication.javareadmeindex.htmlapplication.yamlpom.xml ReviewController.java package com.example.controller;import com.example.websocket.WebSocketProces…...
二分查找向下取整导致的死循环69. x 的平方根
二分查找向下取整导致的死循环 考虑伪题目:从数组arr中查找出目标元素target对应的下标,如果数组中不存在目标元素,找 到第一个元素值小于target的元素的下标。 编写二分查找算法如下: Testvoid testBinarySearch(){int[] arr n…...
Kivy 异步任务
如果要进行一些非常耗时的操作(例如:爬虫等),那么页面就会在这里卡住,而系统就会以为这个软件无响应,并提示关闭,可以说明用户体验极差,因此我们在此处引入异步操作。 在py中引入事件调节器,并在…...
DEV--C++小游戏(吃星星(0.1))
目录 吃星星(0.1) 简介 头文件 命名空间变量 副函数 清屏函数 打印地图函数 移动函数 主函数 0.1版完整代码 吃星星(0.1) 注:版本<1为未实现或只实现部分 简介 用wasd去吃‘*’ 头文件 #include<bi…...
LINUX 入门 4
LINUX 入门 4 day6 7 20240429 20240504 耗时:240min 课程链接地址 第4章 LINUX环境编程——实现线程池 C基础 第3节 #define里面的行不能乱空行,要换行就打\ typedef 是 C 和 C 中的一个关键字,用于为已有的数据类型定义一个新的名字。…...
Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl
本文首发于公众号:机器感知 Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl You Only Cache Once: Decoder-Decoder Architectures for Language Models We introduce a decoder-decoder architecture, YOCO, for large language models, …...
Java Collections.emptyList() 方法详解
前言 在Java开发的日常中,我们常常需要处理集合数据结构,而这其中就免不了要面对“空集合”的场景。传统的做法可能是直接返回 null,但这往往会引入空指针异常的风险,降低了代码的健壮性。幸运的是,Java为我们提供了一…...
Vue前端环境准备
vue-cli Vue-cli是Vue官方提供的脚手架,用于快速生成一个Vue项目模板 提供功能: 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境:NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs(已经安装就不用了) node-…...
代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集
系列文章目录 目录 系列文章目录动态规划:01背包理论基础①二维数组②一维数组(滚动数组) 416. 分割等和子集①回溯法(超时)②动态规划(01背包)未剪枝版剪枝版 动态规划:01背包理论基…...
故障——蓝桥杯十三届2022国赛大学B组真题
问题分析 这道题纯数学,考察贝叶斯公式 AC_Code #include <bits/stdc.h> using namespace std; typedef pair<int,double> PI; bool cmp(PI a,PI b){if(a.second!b.second)return a.second>b.second;return a.first<b.first; } int main() {i…...
做公司网站的好处/搜索引擎排名查询
一:原理: linux操作系统下双网卡绑定有七种模式。现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多。而一般企业都会使用linux操作系统下自带的网卡绑定模式,…...
应用小程序下载/百中搜优化
目录 前言 SQL代码编写汇总 第一题: 第一题注意点:中等难度 找出 薪资第二高 目录 前言 SQL代码编写汇总 第一题: 第一题注意点:中等难度 找出 薪资第二高 Sql 1: Sql2: Sql3: 第二题: 中等难度 Rank :如果两个分数相同,则两个分数排名ÿ…...
找谁做网站比较好/汕头网站建设优化
Php 3.x与4.x中关于对象编程的不兼容问题之一 构造器说 (转)[more]3.x与4.x中关于的不兼容问题“面向对象”听起来是个很流行的词汇,似乎到了如果你还没有,那不如回家种白菜的地步。Php从版本3.x开始支持对象编程,虽然它的Class从一开始就饱受…...
新人如何自学做网站/seo基础入门免费教程
点击上方“蓝色字”可关注我们!暴走时评:奥地利政府将使用以太坊区块链公证价值11.5亿欧元(约合13亿美元)的政府债券拍卖,联邦政府财政局(OeBFA)已指派银行业巨头Oesterreichische Kontrollbank…...
礼嘉网络推广/西安做seo的公司
2019独角兽企业重金招聘Python工程师标准>>> ORACLE日期时间函数大全 (二) 2010-05-11 13:36 13.年月日的处理 select older_date, newer_date, years, months, abs( trunc( newer_date- add_months( older_date,years*12months ) ) ) daysfrom ( select trunc(mont…...
wordpress 清理媒体库/网站制作方案
2019独角兽企业重金招聘Python工程师标准>>> Java 垃圾回收调优不同于任何其它性能优化活动。 首先你要确保自己足够了解整个应用的情况以及调优预期的结果,而不是单单满足于应用的某一部分调优。一般情况下,遵循以下过程比较容易:…...