GB28181协议--设备注册和注销
1、基本要求
根據(jù)《GB/T 28181 —2016》第9章關(guān)于注冊(cè)和注銷的描述,GB28181的注冊(cè)和注銷應(yīng)滿足下面這些要求:
- 注冊(cè)和注銷時(shí)應(yīng)進(jìn)行認(rèn)證, 認(rèn)證方式應(yīng)支持?jǐn)?shù)字摘要認(rèn)證方式;
- SIP 代理在注冊(cè)過期時(shí)間到來之前, 應(yīng)向注冊(cè)服務(wù)器進(jìn)行刷新注冊(cè),系統(tǒng)、設(shè)備注冊(cè)過期時(shí)間應(yīng)可配置, 缺省值為86400s , 應(yīng)在注冊(cè)過期時(shí)間到來之前發(fā)送刷新注冊(cè)消息, 為SIP 服務(wù)器預(yù)留適當(dāng)刷新注冊(cè)處理時(shí)間, 注冊(cè)過期時(shí)間不應(yīng)短于3600s。
- SIP 代理注冊(cè)成功則認(rèn)為SIP 服務(wù)器為在線狀態(tài), 注冊(cè)失敗則認(rèn)為SIP 服務(wù)器為離線狀態(tài);SIP 服務(wù)器在SIP 代理注冊(cè)成功后認(rèn)為其為在線狀態(tài),SIP 代理注冊(cè)過期則認(rèn)為其為離線狀態(tài)。
2、基本流程
SIP設(shè)備的基本注冊(cè)流程如下圖所示:
注冊(cè)流程描述如下:
- SIP 代理向SIP 服務(wù)器發(fā)送 Register 請(qǐng)求;
- SIP 服務(wù)器向 SIP 代理發(fā)送響應(yīng)401, 并在響應(yīng)的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認(rèn)證體制和參數(shù);
- SIP 代理重新向SIP 服務(wù)器發(fā)送 Register 請(qǐng)求, 在請(qǐng)求的 Authorization 字段給出信任書,包含認(rèn)證信息;
- SIP 服務(wù)器對(duì)請(qǐng)求進(jìn)行驗(yàn)證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發(fā)送成功響應(yīng)200 OK, 如果身份不合法則發(fā)送拒絕服務(wù)應(yīng)答。
基于數(shù)字證書的雙向認(rèn)證注冊(cè)說明:
SIP 代理和SIP 服務(wù)器進(jìn)行雙向認(rèn)證。 對(duì)IETF RFC 3261 中定義的方法 Register 進(jìn)行如下頭域擴(kuò)展:
- Authorization 的值增加 Capability 項(xiàng)用來描述編碼器的安全能力。 當(dāng) Authorization 的值為Capability 時(shí), 只攜帶一個(gè)參數(shù)algorithm, 參數(shù)algorithm 的值分為三部分, 中間以逗號(hào)分割。第一部分為非對(duì)稱算法描述, 取值為 RSA; 第二部分為摘要算法描述, 取值為 MD5/SHA-1/SHA-256 中的一個(gè)或者多個(gè); 第三部分為對(duì)稱算法的描述, 取值為 DES/3DES/SM1 中的一個(gè)或者多個(gè)。
- WWW-Authenticate 的 值 增 加 Asymmetric 項(xiàng) 用 來 攜 帶 驗(yàn) 證 SIP 服 務(wù) 器 身 份 的 數(shù) 據(jù)。 當(dāng)
WWW-Authenticate 的值為 Asymmetric 時(shí), 只攜帶參數(shù) nonce 和algorithm 。 algorithm 的
值取安全能力中指明的算法。 - Authorization 的值增加 Asymmetric 項(xiàng)用來攜帶驗(yàn)證編碼器的數(shù)據(jù)。 當(dāng) Authorization 的值
為 Asymmetric 時(shí), 攜帶nonce、response、algorithm 三個(gè)參數(shù)。
注銷流程如下所示:
注銷流程描述如下:
- SIP 代理向SIP 服務(wù)器發(fā)送 Register 請(qǐng)求,Expires 字段的值為0, 表示SIP 代理要注銷;
- SIP 服務(wù)器向 SIP 代理發(fā)送響應(yīng)401, 并在響應(yīng)的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認(rèn)證體制和參數(shù);
- SIP 代理重新向SIP 服務(wù)器發(fā)送 Register 請(qǐng)求, 在請(qǐng)求的 Authorization 字段給出信任書,包含認(rèn)證信息,Expires 字段的值為0;
- SIP 服務(wù)器對(duì)請(qǐng)求進(jìn)行驗(yàn)證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發(fā)送成功響應(yīng)200 OK, 如果身份不合法則發(fā)送拒絕服務(wù)應(yīng)答。
注意:
從上面兩張圖片可以看出,SIP協(xié)議的注冊(cè)和注銷的差異在于Expires字段的值,當(dāng)為0時(shí),設(shè)備是注銷,當(dāng)大于0時(shí)(Expires最小值為3600),設(shè)備是注冊(cè)。
3、基于SIP庫的注冊(cè)和注銷
在這里,我們開發(fā)基于libosip和libexsip庫進(jìn)行開發(fā)。下面是設(shè)備注冊(cè)的步驟:
(1)初始化SIP協(xié)議
先初始化sip,初始化sip,主要包括開啟sip的打印、初始化eXosip_init和監(jiān)聽端口,具體代碼如下:
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)設(shè)備的注冊(cè)和注銷:
設(shè)備的注冊(cè)和注銷使用同一個(gè)接口SipReg,isReg為1代表注冊(cè),為0代表注銷。
下面的函數(shù)是不帶認(rèn)證注冊(cè)和帶認(rèn)證注冊(cè)的兩個(gè)函數(shù)
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, ®);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, ®);ret = eXosip_register_send_register(rid, reg);eXosip_unlock();return ret; }通過上述接口就可以進(jìn)行GB28181的初始化了。
參考資料:
《GBT 28181-2016 公共安全視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)信息傳輸、交換、控制技術(shù)要求》
總結(jié)
以上是生活随笔為你收集整理的GB28181协议--设备注册和注销的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在asp.net中做视频转换,将各种视频
- 下一篇: 这几款好加密软件让你不再担心担心隐私泄露