1、基本要求

根据《GB/T 28181 —2016》第9章关于注册和注销的描述,GB28181的注册和注销应满足下面这些要求:

  • 注册和注销时应进行认证, 认证方式应支持数字摘要认证方式;
  • SIP 代理在注册过期时间到来之前, 应向注册服务器进行刷新注册,系统、设备注册过期时间应可配置, 缺省值为86400s , 应在注册过期时间到来之前发送刷新注册消息, 为SIP 服务器预留适当刷新注册处理时间, 注册过期时间不应短于3600s。
  • SIP 代理注册成功则认为SIP 服务器为在线状态, 注册失败则认为SIP 服务器为离线状态;SIP 服务器在SIP 代理注册成功后认为其为在线状态,SIP 代理注册过期则认为其为离线状态。

2、基本流程

SIP设备的基本注册流程如下图所示:

注册流程描述如下:

  • SIP 代理向SIP 服务器发送 Register 请求;
  • SIP 服务器向 SIP 代理发送响应401, 并在响应的消息头 WWW_Authenticate 字段中给出适合SIP 代理的认证体制和参数;
  • SIP 代理重新向SIP 服务器发送 Register 请求, 在请求的 Authorization 字段给出信任书,包含认证信息;
  • SIP 服务器对请求进行验证, 如果检查出 SIP 代理身份合法, 向 SIP 代理发送成功响应200 OK, 如果身份不合法则发送拒绝服务应答。

基于数字证书的双向认证注册说明:
SIP 代理和SIP 服务器进行双向认证。 对IETF RFC 3261 中定义的方法 Register 进行如下头域扩展:

  • Authorization 的值增加 Capability 项用来描述编码器的安全能力。 当 Authorization 的值为Capability 时, 只携带一个参数algorithm, 参数algorithm 的值分为三部分, 中间以逗号分割。第一部分为非对称算法描述, 取值为 RSA; 第二部分为摘要算法描述, 取值为 MD5/SHA-1/SHA-256 中的一个或者多个; 第三部分为对称算法的描述, 取值为 DES/3DES/SM1 中的一个或者多个。
  • WWW-Authenticate 的 值 增 加 Asymmetric 项 用 来 携 带 验 证 SIP 服 务 器 身 份 的 数 据。 当
    WWW-Authenticate 的值为 Asymmetric 时, 只携带参数 nonce 和algorithm 。 algorithm 的
    值取安全能力中指明的算法。
  • Authorization 的值增加 Asymmetric 项用来携带验证编码器的数据。 当 Authorization 的值
    为 Asymmetric 时, 携带nonce、response、algorithm 三个参数。

注销流程如下所示:

注销流程描述如下:

  • SIP 代理向SIP 服务器发送 Register 请求,Expires 字段的值为0, 表示SIP 代理要注销;
  • SIP 服务器向 SIP 代理发送响应401, 并在响应的消息头 WWW_Authenticate 字段中给出适合SIP 代理的认证体制和参数;
  • SIP 代理重新向SIP 服务器发送 Register 请求, 在请求的 Authorization 字段给出信任书,包含认证信息,Expires 字段的值为0;
  • SIP 服务器对请求进行验证, 如果检查出 SIP 代理身份合法, 向 SIP 代理发送成功响应200 OK, 如果身份不合法则发送拒绝服务应答。

注意:
从上面两张图片可以看出,SIP协议的注册和注销的差异在于Expires字段的值,当为0时,设备是注销,当大于0时(Expires最小值为3600),设备是注册。

3、基于SIP库的注册和注销

在这里,我们开发基于libosip和libexsip库进行开发。下面是设备注册的步骤:

(1)初始化SIP协议

先初始化sip,初始化sip,主要包括开启sip的打印、初始化eXosip_init和监听端口,具体代码如下:

int SipInit(int debugEnable, int transport, int port)
{if (debugEnable){osip_trace_initialize(debugEnable, NULL);}int ret = eXosip_init ();if (ret != OSIP_SUCCESS ){return -1;}ret = eXosip_listen_addr (transport, NULL, port, AF_INET, 0);if ( ret != OSIP_SUCCESS ){eXosip_quit();return -1;}GB_PrintDebug("eXosip_init successfully!\n");return 0;
}

(2)设备的注册和注销:
设备的注册和注销使用同一个接口SipReg,isReg为1代表注册,为0代表注销。

int SipReg(GB28181Param_t *pGB28181Param, int isReg)
{int ret = 0;int expires = 0 ;int unAuthorized = 0;eXosip_event_t *je = NULL;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}if (isReg){expires = atoi(pGB28181Param->userParam.sipExpires);}while(1){if (0 == unAuthorized){ret = SipRegisterUnauthorized(pGB28181Param, expires);if (ret < 0){if(je){eXosip_event_free(je);}return -1;}else {unAuthorized = 1;}}je = eXosip_event_wait(0, 100);    if(NULL == je){eXosip_automatic_action();osip_usleep(100*1000);continue;}if(EXOSIP_REGISTRATION_FAILURE == je->type){if((je->response!=NULL) && (401==je->response->status_code)){ret = SipRegisterAuthorized(pGB28181Param, je->rid, expires);eXosip_event_free(je);if(ret != OSIP_SUCCESS){return -1;}}else {eXosip_event_free(je);unAuthorized = 0;         sleep(GB28181_REG_INTERVAL);return -1;}}else if (EXOSIP_REGISTRATION_SUCCESS == je->type){g_SipState.registerID = je->rid;eXosip_execute();eXosip_automatic_action();eXosip_event_free(je);break;}else{eXosip_event_free(je);}}if (isReg){g_SipState.sipRegStatus = 1;}else {g_SipState.sipRegStatus = 0;}return 0;
}

下面的函数是不带认证注册和带认证注册的两个函数

static int SipRegisterUnauthorized(GB28181Param_t *pGB28181Param, int expires)
{int ret;char from[128] = {0, };char proxy[128] = {0, };eXosip_event_t *je = NULL;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}snprintf(from, sizeof(from), "sip:%s@%s:%s", pGB28181Param->userParam.devSipID, pGB28181Param->userParam.devSipIP,pGB28181Param->userParam.devSipPort);snprintf(proxy, sizeof(proxy), "sip:%s@%s:%s", pGB28181Param->userParam.sipServerID, pGB28181Param->userParam.sipServerIP,pGB28181Param->userParam.sipServerPort);eXosip_masquerade_contact(pGB28181Param->userParam.devSipIP, atoi(pGB28181Param->userParam.devSipPort));     eXosip_set_user_agent(pGB28181Param->productParam.manufacturer);         eXosip_lock();g_SipState.registerID = eXosip_register_build_initial_register( from, proxy, NULL, expires, &reg);if(g_SipState.registerID < 0){eXosip_unlock();return -1;}ret = eXosip_register_send_register(g_SipState.registerID, reg);if(ret != OSIP_SUCCESS){eXosip_unlock();return -1;}// osip_message_free(reg);eXosip_unlock();return 0;
}static int SipRegisterAuthorized(GB28181Param_t *pGB28181Param, int rid, int expires)
{int ret = 0;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}eXosip_lock();eXosip_clear_authentication_info();eXosip_add_authentication_info( pGB28181Param->userParam.devSipID,pGB28181Param->userParam.devSipID,pGB28181Param->userParam.devSipPasswd, "MD5", NULL);eXosip_register_build_register( rid, expires, &reg);ret = eXosip_register_send_register(rid, reg);eXosip_unlock();return ret;
}

通过上述接口就可以进行GB28181的初始化了。

参考资料:
《GBT 28181-2016 公共安全视频监控联网系统信息传输、交换、控制技术要求》

GB28181协议--设备注册和注销相关推荐

  1. Linux驱动模块加载和卸载以及设备注册与注销

    一.驱动模块的加载和卸载 Linux驱动有两种运行方式,第一种就是将驱动编译进Linux内核中,这样当Linux内核启动的时候就会自动运行驱动程序.第二种就是将驱动编译成模块(Linux下模块扩展名为 ...

  2. 【技术教程】基于EasyRTSPSever与GB28181协议设备端EasyGBD实现的摄像机模拟器架构

    上一次我们计划做一款摄像机模拟器设备,主要的功能用途是为了方便更多的安防视频开发者能够更加简单.便捷.高效地找一款摄像机设备来做开发. 安防摄像机虽然很简单就能买到,但是配电.配电源.调网络,占空间, ...

  3. GB28181协议--实时视音频点播(预览)

    1.基本要求 根据<GB/T 28181 -2016>第9章关于实时视音频点播的描述,其内容如下: 实时视音频点播的SIP 消息应通过本域或其他域的SIP 服务器进行路由. 转发, 目标设 ...

  4. 国标GB/T28181视频流媒体网页无插件直播服务4G摄像头无插件直播国标GB28181协议注册、心跳和注销协议说明介绍

    今天我们就来简单介绍下注册.心跳和注销这几个协议.注册和注销很好理解,就是Expires: 0的时候为注销,心跳也很简单就是一个简单的无应答message. 下面将注册的流程图简单摘出来一下: 根据流 ...

  5. 语音对讲功能在GB28181协议国标视频云服务EasyGBS中的项目应用

    在监控行业的语音对讲,指的是监控设备与电脑.手机APP.平台软件之间进行语音交流.例如在手机上预览监控画面时,可以同步跟画面中的人物进行语音对话.目前语音对讲功能已经广泛应用于我们日常监控环境中.需要 ...

  6. 【解决方案】基于国标GB28181协议/HIKSDK/Ehome协议EasyCVR智能融合分析平台在智慧校园人脸识别中的应用

    一.建设背景 随着社会的发展,学校规模不断扩大,给校园的安全和科学管理带来了非常大的挑战:随着学校的开放性管理,特别是高校,进出人员复杂,给学校的人员财产安全管理,带来了非常大的挑战.学校安保工作越来 ...

  7. 宇视摄像机/硬盘录像机等设备接入到国标GB28181协议视频平台EasyGBS的注意事项

    经常有用户咨询宇视的现场对接TSINGSEE青犀视频云边端架构中,国标GB28181协议视频平台EasyGBS需要注意哪些事项,本文我们就在这里整理一下,给大家介绍一下宇视设备接入到国标平台的注意事项 ...

  8. 操作教程:大华摄像头通过GB28181协议注册EasyCVR平台的详细配置

    EasyCVR平台支持多类型设备.多协议方式接入,包括市场主流标准协议国标GB/T28181.RTMP.RTSP/Onvif协议等,以及厂家私有协议如海康SDK.大华SDK.海康Ehome等.其中,国 ...

  9. 国标流媒体服务器GB28181协议和海康设备的交互过程记录

    国标GB28181协议从2016年更新后,变得比之前更火了,到今年已经4年了,国标视频流媒体服务器基础的功能都已经发展起来,而更深层次的功能还需要进一步的研发. 在日常运用中,海康的摄像头运用较为广泛 ...

  10. 大华设备通过GB28181协议接入EasyGBS,无法实现公网语音对讲问题的解析

    在监控行业的语音对讲,指的是监控设备与电脑.手机APP.平台软件之间进行语音交流.目前语音对讲功能已经广泛应用于我们日常监控场景中,比如GB28181协议国标平台EasyGBS,支持语音对讲. 摄像头 ...

最新文章

  1. Win10+Python3.6下Pytorch安装(基于conda或pip)
  2. Android文件的下载
  3. Python IDLE或shell中切换路径
  4. boost learn notes
  5. 【python图像处理】图像的缩放、旋转与翻转
  6. php_rce-攻防世界-web-ThinkPHP版本5的相关漏洞
  7. html中怎么获取搜索框中的值,百度API 搜索框,获取相应的地点的uid
  8. DevOps vs. Agile:它们有什么共同点?
  9. linux测试手柄,Linux Joystick 介绍
  10. Python小项目——学生信息管理系统(详细讲解)
  11. 网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)
  12. 普林斯顿微积分读本02第一章--函数的复合、奇偶函数、函数图像
  13. 中兴笔试题,求子区间元素运算后结果为0
  14. Android Studio设置自动换行快捷键
  15. RunC漏洞导致容器逃逸(CVE-2021-30465)
  16. 使用Pytorch框架
  17. Web变灰-grayscale
  18. 中国联通(广东省分公司)研发技术初面
  19. Serverless 2021 最新调查报告
  20. 门禁信息推送不了服务器,十牛校园门禁系统封闭化管理不封闭消息

热门文章

  1. 联合密度函数求期望_已知(X,Y)的联合概率密度,分别求X,Y的期望、方差
  2. 数据库课程设计(饭店点餐系统)
  3. Java jar 包免费下载(全)
  4. 参加2022年7月PMP考试后感受
  5. 计算机boot进入u盘启动,电脑boot设置U盘启动项具体方法
  6. DEV皮肤(系统默认和自定义皮肤调用)
  7. 高等数学学习笔记——第十讲——子数列与聚点原理(1. 数列收敛的归并性)
  8. win10新建文件夹必须刷新才能显示
  9. 2阶实对称矩阵特征值和特征向量的简单求解方法
  10. hbuilderX里uniapp和php,使用 DCloud 工具 HBuilder X 开发 uni-app 项目踩过的一些坑