GB28181协议--报警
1、簡介
根據《GBT 28181-2016 公共安全視頻監控聯網系統信息傳輸、交換、控制技術要求》9.4節的《報警事件通知和分發基本要求》描述:
發生報警事件時, 源設備應將報警信息發送給 SIP 服務器;SIP 服務器接收到報警事件后, 將報警信息分發給目標設備。 報警事件通知和分發使用IETF RFC 3428 中定義的方法 Message 傳送報警信息。源設備包括SIP 設備、 網關、SIP 客戶端、 聯網系統或者綜合接處警系統以及卡口系統等, 目標設備包括具有接警功能的SIP 客戶端、 聯網系統或者綜合接處警系統以及卡口系統等。
2、流程
報警事件通知和分發流程見下圖:
命令流程描述如下:
- (1): 報警事件產生后, 源設備向SIP 服務器發送報警通知命令, 報警通知命令采用 Message 方法攜帶;
- (2): SIP 服務器收到命令后返回200 OK;
- (3):SIP 服務器接收到報警事件后, 向源設備發送報警事件通知響應命令, 報警通知響應命令采用 Message 方法攜帶;
- (4): 源設備收到命令后返回200 OK;
- (5):SIP 服務器接收到報警事件后, 確定需要轉發的目標設備,SIP 服務器向目標設備發送報警事件通知命令, 報警通知命令采用 Message 方法攜帶;
- (6): 目標設備收到命令后返回200 OK;
- (7): 目標設備接收到報警事件后, 向SIP 服務器發送報警事件通知響應命令, 報警通知響應命令采用 Message 方法攜帶;
- (8):SIP 服務器收到命令后返回200 OK
3、協議接口
-
(1)請求命令消息體
消息頭 Content-type 字段為 Content-type: Application/ MANSCDP+xml。
報警事件通知和分發流程中的請求命令采用 MANSCDP 協議格式定義, 詳細描述見 A.2.5 報警通知。
源設備向SIP 服務器通知報警、SIP 服務器向目標設備發送報警的通知命令均采用 Message 方法的消息體攜 帶。 報 警 事 件 通 知 命 令 應 包 括 命 令 類 型 (CmdType) 、 命 令 序 列 號 (SN) 、 設 備 編 碼(DeviceID) 、 報警級別(AlarmPriority) 等。 可選項: 報警時間(AlarmTime) 、 報警方式(AlarmMethod) 、經度(Longitude) 、 緯度(Latitude) 、 擴展報警類型(AlarmType) 、 報警類型參數(AlarmTypeParam) 。相關設備在收到 Message 消息后, 應立即返回200 OK 應答,200 OK 應答均無消息體。 -
(2)應答命令消息體
消息頭 Content-type 字段為 Content-type: Application/ MANSCDP+xml。
報警事件通知和分發流程中的應答命令采用 MANSCDP 協議格式定義, 詳細描述見 A.2.6 報警通知應答。SIP 服務器向源設備、 目標設備向SIP 服務器發送報警通知應答命令均采用 Message方法的消息體攜帶。報警事件通知應答命令應包括命令類型(CmdType) 、 命令序列號(SN) 、 設備編碼(DeviceID) 、執行結果(Result) 。
相關設備在收到 Message 消息后, 應立即返回200 OK 應答,200 OK 應答均無消息體。
4、軟件代碼
報警發送接口:
int SipSendAlarm(GB28181Param_t *pGB28181Param, AlarmHander_t *pHander, int sn);
報警消息構建接口:
static int MakeAlarmBody(char *xmlBody, int xmlBodyLen, int sn, GB28181Param_t *pGB28181Param, AlarmHander_t *pHander);
報警應答解析:
接收sip數據接口:
int SipEventProcess(GB28181Param_t *pGB28181Param)
解析應答接口:
static int SipResponsMsgProcess(GB28181Param_t *pGB28181Param, eXosip_event_t *sipEvent) {char xmlSN[32] = {0,};char deviceID[32] = {0,};char cmdType[32] = {0,};char rspXmlBody[2048] = {0,};osip_body_t *rspBody = NULL;mxml_node_t *xml = NULL;mxml_node_t *node = NULL;osip_message_t *rsqMsg = NULL;if (!pGB28181Param || !sipEvent){return -1;}eXosip_lock();/*獲取接收到請求的XML消息體*/int ret = osip_message_get_body(sipEvent->response, 0, &rspBody);if((NULL == rspBody) || (NULL == rspBody->body)){eXosip_unlock();return -1;}eXosip_unlock();xml = mxmlLoadString(NULL,rspBody->body, MXML_TEXT_CALLBACK);if (!xml){return -1;}// 查找CmdTypenode = mxmlFindElement(xml, xml, "CmdType", NULL, NULL, MXML_DESCEND);if (!node){return -1;}strncpy(cmdType, mxmlGetText(node, NULL), sizeof(cmdType));if (strlen(cmdType) <=0 ){return -1;}node = mxmlFindElement(xml, xml, "DeviceID", NULL, NULL, MXML_DESCEND);if (!node){return -1;}strncpy(deviceID, mxmlGetText(node, NULL), sizeof(deviceID));if (strlen(deviceID) <=0){return -1;}// 對這個SN需要做一下防重復處理,后面再考慮這個功能node = mxmlFindElement(xml, xml, "SN", NULL, NULL, MXML_DESCEND);if (!node){return -1;}// 應答時,需要使用設備發過來的SNstrcpy(xmlSN, mxmlGetText(node, NULL));if (strlen(xmlSN) <=0 ){return -1;}eXosip_lock();if ((ret = eXosip_message_build_answer( sipEvent->tid, 200, &rsqMsg)) != OSIP_SUCCESS){eXosip_unlock();return -1;}if ((ret = eXosip_message_send_answer( sipEvent->tid, 200, rsqMsg)) != OSIP_SUCCESS){eXosip_unlock();return -1;}eXosip_unlock();if (!strcmp(cmdType, "Alarm")){AlarmMsgParase(xml, rspXmlBody, sizeof(rspXmlBody), xmlSN, deviceID, pGB28181Param);}else{mxmlDelete(xml);return -1;}mxmlDelete(xml);return 0; }解析應答命令:
static int AlarmMsgParase(mxml_node_t *xml, char *msg, int msgLen, char *sn, char *devID, GB28181Param_t *pGB28181Param) {char result[32] = {0,};if ( !pGB28181Param || !msg || msgLen<= 0 || !xml ){return -1;}memset(msg, 0, msgLen);uint8_t iChn = GetChannelID(devID, pGB28181Param, GET_ALARM_TYPE);if (!IS_ALARM_CHN_VALID(iChn)){return -1;}// 查找CmdTypemxml_node_t *node = mxmlFindElement(xml, xml, "Result", NULL, NULL, MXML_DESCEND);if (!node){return -1;}strncpy(result, mxmlGetText(node, NULL), sizeof(result));if (!strcmp(result, "OK")){}return 0; }建議閱讀:
GB28181協議–設備注冊和注銷
參考資料:
《GBT 28181-2016 公共安全視頻監控聯網系統信息傳輸、交換、控制技術要求》
總結
以上是生活随笔為你收集整理的GB28181协议--报警的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu3072 Intelligence
- 下一篇: Jenkins 随笔