GB28181学习(二)——注册与注销
概念
- 使用REGISTER方法进行注册和注销;
- 注册和注销应进行认证,认证方式应支持数字摘要认证方式,高安全级别的宜支持数字证书认证;
- 注册成后,SIP代理在注册过期时间到来之前,应向注册服务器进行刷新注册;
- 若注册失败,应在不短于60s的时间间隔内重新发起注册;
- 系统、设备注册过期时间可配置;
- SIP代理是否注册成功决定SIP服务器在离线状态;
- 对于处于开启网络地址转换(NAT)功能的路由器内侧的SIP代理,应该支持使用TCP发起SIP注册,并在注册成功后保持TCP连接不关闭,SIP代理及服务器在该TCP通道里发送所有请求及响应SIP消息。若TCP通道断开,则认为SIP代理异常掉线,SIP代理应在一定时间间隔内重新发起注册;
流程
注册

注册流程:
- SIP代理向SIP服务器发送REGISTER请求;
- SIP服务器向SIP代理响应401(未认证),返回的消息头里给出适合SIP代理的认证体制和参数;
- SIP代理重新向SIP服务器发送REGISTER请求,在请求的Authorization中给出信任书,包括认证信息;
- SIP服务对请求进行认证,如检测SIP代理身份合法,向SIP代理响应200 OK,如检测不合法发送拒绝服务应答;
注销

注销流程:
- SIP代理向SIP服务器发送REGISTER请求,Expires字段的值为0,表示SIP代理要注销;
- SIP服务器向SIP代理响应401(未认证),返回的消息头里给出适合SIP代理的认证体制和参数;
- SIP代理重新向SIP服务器发送REGISTER请求,在请求的Authorization中给出信任书,包括认证信息,Expires字段的值为0;
- SIP服务对请求进行认证,如检测SIP代理身份合法,向SIP代理响应200 OK,如检测不合法发送拒绝服务应答;
注册重定向(2022新增)

重定向流程:
- 设备或系统段的SIP代理向SIP重定向服务器发送REGISTER请求;
- SIP重定向服务器向SIP代理响应401(未认证),返回的消息头里给出适合SIP代理的认证体制和参数;
- SIP代理重新向SIP重定向服务器发送REGISTER请求,在请求的Authorization中给出信任书,包括认证信息;
- SIP重定向服务器验证请求,如检测SIP代理身份合法,SIP重定向服务器根据内部策略选择设备需注册的SIP服务器A,并回复注册请求响应302,响应消息携带Contact头域和Expires,Contact格式为sip:SIP服务器A编码@目的IP地址端口,在此头域中携带SIP服务A的地址;
- SIP代理收到302重定向请求后,向SIP服务器A发起注册;
- 6~8:完成注册重定向流程后,后续所有请求和响应动作由SIP服务器A和设备直接完成;
- 重定向后,如果SIP代理检测SIP服务器A离线或注册被SIP服务器拒绝,SIP代理应重新执行注册重定向流程,向SIP重定向服务器发起注册请求;
状态信息报送(包括心跳检测)
要求
- 当原设备发现工作异常时,应立即向本SIP监控域的SIP服务器发送状态信息;
- 无异常时,定时向本SIP监控域的SIP服务器发送状态信息;
- 状态信息报送采用MESSGAE方法;
- SIP设备宜在状态信息中携带故障子设备描述信息;
- 通过周期性的状态信息报送,实现注册服务器与原设备之间的状态检测,即心跳机制;
- 心跳发送发、接收方需统一配置心跳间隔参数,安装心跳间隔定时发送心跳消息,默认心跳间隔为60s;
- 心跳发送方、接收方需统一配置心跳超时次数参数,心跳消息连续超时达到心跳超时次数则认为对方下线,默认心跳超时次数为3次;
- 心跳接收方在心跳发送方上线状态下,检测到心跳消息连续超时达到配置次数则心跳发送方离线;
- 心跳发送方在心跳接收方上线状态下,检测不到心跳响应消息连续超时达到配置次数则认为心跳接收方离线;
流程

心跳流程:
- 源设备向SIP服务器发送设备状态信息报送命令,采用MESSAGE方法携带;
- SIP服务器收到命令后返回200 OK;
测试
准备
1)一台支持国标的海康设备;
2)自研的客户端界面程序+SIP服务端程序;
设备配置

如图为海康设备网页端配置,主要关注以下几个配置项:
- 本地SIP端口:默认5060,相机针对GB28181协议开放的通信端口;
- 传输协议:支持UDP和TCP协议;
- 勾选“启动”按钮,启用GB28181-2016协议;
- SIP服务器ID:服务器标识,详见GB28181协议定义;
- SIP服务域:SIP服务器ID的前10位;
- SIP服务器地址:SIP服务所在机器的IP地址;
- SIP服务端口:SIP服务端口;
启用GB28181后,设备定期对外发送REGISTER命令,如无服务端连接,由ICMP协议返回464目标不可达,抓包如下所示:

REGISTER命令分析
部分命令分析:
- 传输协议为UDP;
- 注册命令基于**SIP协议(Session Initiation Protocol)**传输;
- 注册命令的method为REGISTER;
- Expires:注册有效期,默认3600秒;
代码架构

工程目前主要分为3部分:
1)tinyXml:编译为静态库,用于xml解析。TinyXml是一个c++的xml解析库,是一个基于DOM模型、非验证的轻量级解释器;
2)mysipsdk:编译为动态库,基于开源库pjsip做二次封装,供客户端使用;
3)GB28181Client:基于qt开发的界面客户端,依赖于mysipsdk.dll;
界面展示

抓包分析
程序启动后,输入端口、域名等信息,点击连接,抓包可查看注册成功。

相关文章:
GB28181学习(二)——注册与注销
概念 使用REGISTER方法进行注册和注销;注册和注销应进行认证,认证方式应支持数字摘要认证方式,高安全级别的宜支持数字证书认证;注册成后,SIP代理在注册过期时间到来之前,应向注册服务器进行刷新注册&…...
【Linux】线程安全-信号量
文章目录 信号量原理信号量保证同步和互斥的原理探究信号量相关函数初始化信号量函数等待信号量函数释放信号量函数销毁信号量函数 信号量实现生产者消费者模型 信号量原理 信号量的原理:资源计数器 PCB等待队列 函数接口 资源计数器:对共享资源的计…...
数字IC验证——PSS可移植测试用例
PSS是Accellera组织定义的测试用例生成规范,其思想是定义一个抽象模型,EDA工具可以从中生成适用于每个设计层次结构和每个验证平台的测试,即PSS定义了统一的测试场景,而场景的使用可以横跨不同验证层次和配置。 这种特性决定了PSS…...
java设计模式---策略模式
策略模式的定义 策略设计模式是一种行为设计模式。当在处理一个业务时,有多种处理方式,并且需要再运行时决定使哪一种具体实现时,就会使用策略模式。 策略模式的类图: 策略模式的实现 在支付业务中,有三种付款方式&…...
5-redis集群搭建安装
1.先决条件 1.1.OS基础配置 CentOS为了能够正常安装redis,需要对CentOS进行常规的一些基础配置,主要有:关闭防火墙与selinux,设置主机名,配置虚拟机IP地址使其能够与外网ping通,配置IP地址与主机名映射,配置yum源。具体配置参见: Linux常规基础配置_小黑要上天的博客…...
(数字图像处理MATLAB+Python)第十一章图像描述与分析-第七、八节:纹理描述和其他描述
文章目录 一:纹理描述(1)联合概率矩阵法A:定义B:基于联合概率矩阵的特征C:程序 (2)灰度差分统计法A:定义B:描述图像特征的参数 (3)行程…...
MySQL提权
参考: mysql提权篇 | Wh0ales Blog MySQL 提权方法整理 - Geekbys Blog MySQL_UDF提权漏洞复现-云社区-华为云 MYSQL UDF手动提权及自动化工具使用_udf提权工具_小直789的博客-CSDN博客 MySQL提权的三种方法 - FreeBuf网络安全行业门户 ......
FPGA优质开源项目 – UDP万兆光纤以太网通信
本文开源一个FPGA项目:UDP万兆光通信。该项目实现了万兆光纤以太网数据回环传输功能。Vivado工程代码结构和之前开源的《UDP RGMII千兆以太网》类似,只不过万兆以太网是调用了Xilinx的10G Ethernet Subsystem IP核实现。 下面围绕该IP核的使用、用户接口…...
如何中mac上安装多版本python并配置PATH
摘要 mac 默认安装的python是 python3,但是如果我们需要其他python版本时,该怎么办呢? 例如:需要python2 版本,如果使用homebrew安装会提示没有python2。同时使用python --version 会发现commond not found。 所以本…...
window 常用基础命令
0、起步 0-1) 获取命令的参数指引 netstat /? 0-2) 关于两个斜杠: window 文件路径中使用反斜杠:\ linux 文件路径中使用:/ 1、开关机类指令 shutdown /s # 关机shutdown /r # 重启shutdown /l …...
lintcode 1815 · 警报器 【simple vip 前缀和数组】
题目 https://www.lintcode.com/problem/1815 一个烟雾警报器会监测len秒内的烟雾值,如果这段时间烟雾值平均值大于k那么警报器会报警。现在给你n个数代表刚开始工作n秒内警报器监测的烟雾值(警报器从第len秒开始判断是否报警),…...
【强化学习】MDP马尔科夫链
基本元素 状态集:表示智能体所处所有状态的全部可能性的集合。类似的集合,行为集,回报集决策:规定我在某个状态下,我做出某个action马尔可夫链:学术上来说是无记忆性质。说白了就是我只在乎我目前的状态。…...
SpringBoot自写项目记录
设置静态资源映射 Slf4j 用来打印日志 Configuration Slf4j //设置静态资源映射 public class WebMvcConfig extends WebMvcConfigurationSupport {Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {log.info("开始静态资源配置");r…...
Windows10上使用llama-recipes(LoRA)来对llama-2-7b做fine-tune
刚刚在Windows10上搭建环境来对llama2做finetune,里面坑还是挺多的,这里把印象中的坑整理了一下以作备忘。 llama-recipes是meta的开源项目,Github地址为:GitHub - facebookresearch/llama-recipes: Examples and recipes for Ll…...
06-限流策略有哪些,滑动窗口算法和令牌桶区别,使用场景?【Java面试题总结】
限流策略有哪些,滑动窗口算法和令牌桶区别,使用场景? 常见的限流算法有固定窗口、滑动窗口、漏桶、令牌桶等。 6.1 固定窗口 概念:固定窗口(又称计算器限流),对一段固定时间窗口内的请求进行…...
2021年06月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里 第1题:逆波兰表达式 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 …...
Tuxera NTFS for Mac2023苹果电脑Mac硬盘读写工具
Tuxera NTFS for Mac是一款高效稳定的NTFS读写工具,可以让你在Mac上完整地读写兼容NTFS格式驱动器,对磁盘进行访问、编辑、存储和传输文件等操作。Tuxera NTFS for Mac软件是一款高效稳定的NTFS读写工具,可以让你在Mac上完整地读写兼容NTFS格…...
系统调用的过程
系统调用也是库函数的底层实现,当高级语言代码中如调用了库函数,在编译为机器语言指令后,指令包含前期处理相关命令、传参指令、陷入指令、后续处理相关指令。在执行陷入指令时发生内中断,使CPU进入核心态,执行对系统调…...
Python将多个文件的名称或后缀名由大写字母修改为小写的方法
本文介绍基于Python语言,基于一个大文件夹,遍历其中的多个子文件夹,并对于每一个子文件夹中的大量文件,批量将其文件的名称或后缀名中的字母由大写修改为小写的方法。 本文期望实现的需求为:现有一个大文件夹ÿ…...
Debezium的三种部署方式
Debezium如何部署 debezium 有下面三种部署方式,其中最常用的就是 kafka connect。 kafka connect 一般情况下,我们通过 kafka connect 来部署 debezium,kafka connect 是一个框架和运行时: source connectors:像 debezium 这样将记录发送到 kafka 的source connectors…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
