视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享

news2024/12/23 5:32:30

目录

一、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);
    // 登出方法,传入登录ID
    void 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地址和端口,用于RTSP
    char   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 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1657658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电商核心技术揭秘53:社群营销的策略与实施

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

手机传输助手有哪些?如何快速互传文件?

手机已经成为我们生活和工作中不可或缺的一部分&#xff0c;而手机传输助手&#xff0c;作为一种帮助我们在不同设备之间快速、方便地共享文件的工具&#xff0c;其重要性不言而喻。无论是在工作中需要将文件从电脑传输到手机&#xff0c;还是在生活中想要与朋友分享美好的瞬间…

【智能算法】人工原生动物优化算法(APO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.获取代码 1.背景 2024年&#xff0c;X Wang受到自然界原生动物启发&#xff0c;提出了人工原生动物优化算法&#xff08; Artificial Protozoa Optimizer, APO&#xff09;。 2.算法原理 2.1算法思想 AP…

一文玩转Vue3参数传递——全栈开发之路--前端篇(8)

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

导弹追踪效果实现_unity基础开发教程

Unity开发中导弹追踪的原理与实现 前言原理逻辑实现导弹逻辑目标赋值 应用效果结语 前言 ⭕在之前的一个项目的开发中&#xff0c;需要加入一个导弹追踪的游戏功能&#xff0c;且还要实现不规则发射路径&#xff0c;但是这种功能是第一次做&#xff0c;经过查阅资料和询问做过的…

java io包

InputStream InputStream 是 Java I/O 中所有输入流的抽象基类&#xff0c;它定义了读取字节流的基本方法。InputStream 类提供了许多子类&#xff0c;用于从不同的数据源读取数据&#xff0c;如文件、网络连接、内存等。 InputStream 提供了以下常用的方法&#xff1a; int…

Magic Studio Eraser API使用教程

AI橡皮擦 - 使用网址 Magic Studio的AI橡皮擦功能非常好用&#xff0c;能去除图片中的杂物。但是网页版只支持低分辨率下载&#xff0c;想要原图就得开会员&#xff0c;价格不菲。 不过官网其实提供了API接入方式&#xff0c;并且有100次的免费试用机会 API接入网站 在这里可…

PyQt6--Python桌面开发(3.运行QTDesigner生成的ui文件程序)

运行QTDesigner生成的ui文件程序 用QTDesigner设计一个简单的UI 保存ui文件&#xff0c;放到项目里面去 通过pyqt6包里面的uic来加载ui文件 import sysfrom PyQt6.QtWidgets import QApplication from PyQt6 import uicif __name__ __main__:appQApplication(sys.argv)uiui…

C++对象引用作为函数参数

使用对象引用作为函数参数最常见&#xff0c;它不但有指针作为参数的优点&#xff0c;而且比指针作为参数更简单、更方便。 引用方式进行参数传递&#xff0c;形参对象就是实参对象的“别名”&#xff0c;对形参的操作其实就是对实参的操作。 例如:用对象引用进行参数传…

基于Springboot的校园悬赏任务平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园悬赏任务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

1010: 折半查找的实现

解法&#xff1a; #include<iostream> #include<vector> using namespace std; void solve() {int n;cin >> n;vector<int> vec(n);for (int& x : vec) cin >> x;int x;cin >> x;int l 0, r n-1, cnt 0;while (l < r) {cnt;int…

Python语言在地球科学交叉领域中的实践技术融合应用

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台&#xff08;x86和arm&#xff09;&#xff0c;Python简洁的语法和对动态输入的支持&#xff0c;再加上解释性语言的本质&…

代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集

系列文章目录 目录 系列文章目录动态规划&#xff1a;01背包理论基础①二维数组②一维数组&#xff08;滚动数组&#xff09; 416. 分割等和子集①回溯法&#xff08;超时&#xff09;②动态规划&#xff08;01背包&#xff09;未剪枝版剪枝版 动态规划&#xff1a;01背包理论基…

【MySQL基本查询(上)】

文章目录 一、多行插入 指定列插入数据更新表中某个数据的信息&#xff08;on duplicate&#xff09;了解affected报告信息 二、检索功能1.select 查询1.1全列查询1.2指定列查询1.3where条件筛选子句案例 2.结果排序案例 3.筛选分页结果offset实现分页 一、多行插入 指定列插…

QT:小项目:登录界面 (下一章连接数据库)

一、效果图 登录后&#xff1a; 二、项目工程结构 三、登录界面UI设计 四主界面 四、源码设计 login.h #ifndef LOGIN_H #define LOGIN_H#include <QDialog>namespace Ui { class login; }class login : public QDialog {Q_OBJECTpublic:explicit login(QWidge…

es使用遇到的bug总结

本来版本7.4.0不行&#xff0c;最后换了个版本7.15.1就可以了&#xff0c;但又出现以下问题了&#xff1a; Beanpublic ElasticsearchClient elasticsearchClient() { // RestClient client RestClient.builder(new HttpHost("localhost", 9200,"http&q…

STM32理论 —— μCOS-Ⅲ(新)

文章目录 1. 任务调度器1.1 抢占式调度 μCos-Ⅲ全称是Micro C OS Ⅲ&#xff0c;由Micriμm 公司发布的一个基于C 语言编写的第三代小型实时操作系统(RTOS)&#xff1b; RTOS 与裸机相比最大的优势在于多任务管理与实时性&#xff0c;它提供了多任务管理和任务间通信的功能&a…

找出100~200的全部素数

解题思路&#xff1a; 判别 m 是否为素数的算法是这样的&#xff1a;让 m 被2~除&#xff0c;如果 m 不能被2~之中任何一个整数整除&#xff0c;就可以确定 m 是素数。为了记录 m 是否为素数&#xff0c;可以用一个布尔变量 prime 来表示。在循环开始时先设 prime 为真…

【Leetcode】八大排序

总述 插入排序&#xff1a;直接插入排序&#xff1b;希尔排序&#xff1b; 选择排序&#xff1a;简单选择排序&#xff1b;堆排序&#xff1b; 交换排序&#xff1a;冒泡排序&#xff1b;快速排序&#xff1b; 归并排序&#xff1b; 桶排序/基数排序&#xff1b; 直接插入排序 …

ssm105基于JAVAEE技术校园车辆管理系统+jsp

校园车辆管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园车辆管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…