GB28181协议--心跳
1、心跳介紹:
根據(jù)《GBT 28181-2016 公共安全視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)信息傳輸、交換、控制技術(shù)要求》9.6.1狀態(tài)信息報送章節(jié)描述。
當(dāng)源設(shè)備(包括網(wǎng)關(guān)、SIP 設(shè)備、SIP 客戶端或聯(lián)網(wǎng)系統(tǒng)) 發(fā)現(xiàn)工作異常時, 應(yīng)立即向本 SIP 監(jiān)控域的SIP服務(wù)器發(fā)送狀態(tài)信息; 無異常時, 應(yīng)定時向本SIP 監(jiān)控域的SIP 服務(wù)器發(fā)送狀態(tài)信息。 SIP 設(shè)備宜在狀態(tài)信息中攜帶故障子設(shè)備描述信息。
通過周期性的狀態(tài)信息報送, 實現(xiàn)注冊服務(wù)器與源設(shè)備之間的狀態(tài)檢測即心跳機制。
心跳發(fā)送方、 接收方需統(tǒng)一配置“心跳間隔”參數(shù), 按照“心跳間隔”定時發(fā)送心跳消息, 默認(rèn)心跳間隔60 s。 心跳發(fā)送方、 接收方需統(tǒng)一配置“心跳超時次數(shù)”參數(shù), 心跳消息連續(xù)超時達到“心跳超時次數(shù)”。則認(rèn)為對方下線, 默認(rèn)心跳超時次數(shù)3 次。
心跳接收方在心跳發(fā)送方上線狀態(tài)下檢測到心跳消息連續(xù)超時達到商定次數(shù)則認(rèn)為心跳發(fā)送方離線; 心跳發(fā)送方在心跳接收方上線狀態(tài)下檢測到心跳消息響應(yīng)消息連續(xù)超時達到商定次數(shù)則認(rèn)為心跳接收方離線。
2、命令流程
狀態(tài)信息報送流程見下圖:
- 源設(shè)備向SIP 服務(wù)器發(fā)送設(shè)備狀態(tài)信息報送命令。 設(shè)備狀態(tài)信息報送命令采用 Message 方
法攜帶; - SIP 服務(wù)器收到命令后返回200 OK。
狀態(tài)信息報送需要攜帶的信息如下:
傳輸信息示范:
3、軟件代碼:
GB28181保活可以開啟一個定時器或者一個線程,按照指定的時間發(fā)送如下指令(GB28181Keeplive) ,如果超過最大的超時次數(shù)(心跳超時時間=超時次數(shù)*定時發(fā)送心跳間隔),設(shè)備需要重新注冊。
GB28181Keeplive實現(xiàn)如下所示,GB28181Keeplive基于libosip和libeXsip開發(fā):
int GB28181Keeplive(GB28181Param_t *pGB28181Param) {char from[128] = {0,}; char proxy[128] = {0,}; char xml_body[1024] = {0,};osip_message_t *rqt_msg = NULL;// sip還未注冊,那么不保活if (!g_SipState.sipRegStatus || !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);/* 構(gòu)建"MESSAGE"請求 */if (eXosip_message_build_request(&rqt_msg, "MESSAGE", proxy, from, NULL)!=OSIP_SUCCESS){return -1;}snprintf(xml_body, sizeof(xml_body), "<?xml version=\"1.0\"?>\r\n""<Notify>\r\n""<CmdType>Keepalive</CmdType>\r\n"/*命令類型*/"<SN>%d</SN>\r\n"/*命令序列號*/"<DeviceID>%s</DeviceID>\r\n"/*設(shè)備編碼*/"<Status>OK</Status>\r\n"/*是否正常工作*/"</Notify>\r\n",GetSipSN(), pGB28181Param->userParam.devSipID);if (osip_message_set_content_type(rqt_msg, "Application/MANSCDP+xml")!=OSIP_SUCCESS){osip_message_free(rqt_msg);return -1;}if (osip_message_set_body(rqt_msg, xml_body, strlen(xml_body))!=OSIP_SUCCESS){osip_message_free(rqt_msg);return -1;}/* 發(fā)送消息 */eXosip_lock();eXosip_message_send_request(rqt_msg);eXosip_unlock();return 0; }建議閱讀:
GB28181協(xié)議–設(shè)備注冊和注銷
參考資料:
《GBT 28181-2016 公共安全視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)信息傳輸、交換、控制技術(shù)要求》
總結(jié)
以上是生活随笔為你收集整理的GB28181协议--心跳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 匹配图片路径_php正则匹配图片
- 下一篇: 踏实工作,实现价值