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);

int SipSendAlarm(GB28181Param_t *pGB28181Param, AlarmHander_t *pHander, int sn)
{int ret = 0;char from[128] = {0,};  char proxy[128] = {0,}; char xmlBody[1024] = {0,};osip_message_t *rqt_msg = NULL;// sip还未注册,那么不发送数据if (!SipGetRegStatus() || !pGB28181Param || !pHander){return -1;}if (!IS_ALARM_CHN_VALID(pHander->alarmChn)){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);/* 构建"MESSAGE"请求 */if (eXosip_message_build_request(&rqt_msg, "MESSAGE", proxy, from, NULL)!=OSIP_SUCCESS){return -1;}if (MakeAlarmBody(xmlBody, sizeof(xmlBody), sn, pGB28181Param, pHander)){return -1;}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, xmlBody, strlen(xmlBody))!=OSIP_SUCCESS){osip_message_free(rqt_msg);return -1;}/* 发送消息 */eXosip_lock();ret = eXosip_message_send_request(rqt_msg);eXosip_unlock();return (ret==OSIP_SUCCESS)?0:-1;
}

报警消息构建接口:
static int MakeAlarmBody(char *xmlBody, int xmlBodyLen, int sn, GB28181Param_t *pGB28181Param, AlarmHander_t *pHander);

static int MakeAlarmBody(char *xmlBody, int xmlBodyLen, int sn, GB28181Param_t *pGB28181Param, AlarmHander_t *pHander)
{if (!xmlBody ||!pGB28181Param || !pHander){return -1;}snprintf(xmlBody, xmlBodyLen, "<?xml version=\"1.0\"?>\r\n""<Notify>\r\n""<CmdType>Alarm</CmdType>\r\n"                 /*命令类型*/"<SN>%d</SN>\r\n"                             /*命令序列号*/"<DeviceID>%s</DeviceID>\r\n"                    /*设备编码*/"<AlarmPriority>%d</AlarmPriority>\r\n"       /*报警等级*/"<AlarmTime>%s</AlarmTime>\r\n"               /*报警时间*/"<AlarmMethod>%d</AlarmMethod>\r\n"           /*报警方式*/"<AlarmDescription>%s</AlarmDescription>\r\n"     /*警情描述*/"<Longitude>0.000</Longitude>\r\n""<Latitude>0.000</Latitude>\r\n""<Info>\r\n""<AlarmType>%d</AlarmType>\r\n"                 /*报警类型*/"<AlarmTypeParam>\r\n""</AlarmTypeParam>\r\n""</Info>\r\n""</Notify>\r\n",sn, pGB28181Param->userParam.iAlarmChn[pHander->alarmChn],pGB28181Param->userParam.iAlarmPriority[pHander->alarmChn],pHander->alarmTime,pHander->alarmMethod,pHander->alarmDescri,pHander->alarmType);return 0;
}

报警应答解析:
接收sip数据接口:
int SipEventProcess(GB28181Param_t *pGB28181Param)

int SipEventProcess(GB28181Param_t *pGB28181Param)
{int ret = 0;int len = 0;char *msg = NULL;osip_header_t *dest = NULL;eXosip_event_t *sipEvent = NULL;sipEvent = eXosip_event_wait( 0, 100);if (!sipEvent){eXosip_lock();eXosip_execute();eXosip_automatic_action();eXosip_unlock();return -1;}eXosip_lock();eXosip_execute();eXosip_automatic_action();eXosip_unlock();switch(sipEvent->type){case EXOSIP_MESSAGE_ANSWERED:{// 更新保活时间pthread_mutex_lock(&g_SipState.mutex);g_SipState.keepliveAckTime = GetSysSec();pthread_mutex_unlock(&g_SipState.mutex);if(MSG_IS_MESSAGE(sipEvent->response)){ret = SipResponsMsgProcess(pGB28181Param, sipEvent);}}break;default:GB_PrintWarn("error Event,  Event type: %d\n", sipEvent->type);break;}eXosip_event_free(sipEvent);return ret;
}

解析应答接口:

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协议--报警相关推荐

  1. 【解决方案】基于国标GB28181协议EasyGBS平台搭建的交警执法综合管理视频监控方案

    行业背景 随着计算机技术和无线网络通信技术的快速发展,数字化技术在安防领域的应用越来越广泛,特别是在公安.交警等重要执法部门,网络化的联网监控需求越来越大. 如何在交警执法系统中做到将远程的监视.遥控 ...

  2. GB28181 协议实现H5无插件RTMP/HTTP-FLV/HLS直播监控方案 - sfxlab

    SFX流媒体解决方案基于安防行业推出了以媒体汇聚平台(SfxMCP)为主,以媒体分发平台(SfxMDP)和媒体存储平台(SfxMSP)为辅,实现rtsp/onvif/gb28181相关设备或平台的汇聚 ...

  3. GB28181协议简介以及学习GB28181协议所涉及的名词汇总(入门篇)

    1.GB/T 28181 -2016协议简介: 近年来,国内视频监控应用发展迅猛,系统接入规模不断扩大,涌现了大量平台提供商,平台提供商的接入协议各不相同,终端制造商需要给每款终端维护提供各种不同平台 ...

  4. 【解决方案】国标GB28181协议视频智能分析平台打造智慧企业AR云景解决方案

    在现今科技发展之下,如果说有什么能再次掀起产业更替大潮,第一时间我们想到的可能是VR/AR,VR/AR最有可能率先实现应用的九大领域:视频游戏.事件直播.视频娱乐.医疗保健.房地产.零售.教育.工程和 ...

  5. 【解决方案】基于国标GB28181协议视频智能分析平台EasyCVR/EasyGBS打造的智慧企业AR云景解决方案

    在现今科技发展之下,如果说有什么能再次掀起产业更替大潮,第一时间我们想到的可能是VR/AR,VR/AR最有可能率先实现应用的九大领域:视频游戏.事件直播.视频娱乐.医疗保健.房地产.零售.教育.工程和 ...

  6. 国标GB28181协议视频智能分析平台EasyCVR,构建智慧企业AR云景解决方案

    在现今科技发展之下,如果说有什么能再次掀起产业更替大潮,第一时间我们想到的可能是VR/AR,VR/AR最有可能率先实现应用的九大领域:视频游戏.事件直播.视频娱乐.医疗保健.房地产.零售.教育.工程和 ...

  7. 【解决方案】物流行业如何通过国标GB28181协议国标平台EasyGBS建立车载视频可视化监控系统?

    全国物流行业在中国经济迅速发展的同时获得迅速壮大,每个地区都有着数量庞大的物流运输车辆.随着物流运输车辆数量的增长,逐渐暴露出很多车辆管理上的漏洞,使得物流企业的进一步壮大发展,受到很大限制. 目前, ...

  8. GB28181协议开发介绍

    GB28181协议简介 GB/T28181-2011 <安全防范视频监控联网系统信息传输.交换.控制技术要求>是由公安部科技信息化局提出,由全国安全防范报警系统标准化技术委员会(SAC/T ...

  9. 【解决方案】国标GB28181协议视频平台EasyGBS搭建培训机构网络视频监控系统解决方案

    近来校园安全事件及校车事故频发,引起全社会对学生上学途中及在校期间安全状况的强烈关注,送孩子去培训机构上辅导班,兴趣课亦是如此.怎样才能为家长解除后顾之忧呢?而作为培训机构管理者,必须每时每刻对园中各 ...

  10. 国标GB28181协议视频平台EasyGBS告警上报功能新增视频告警上报并录像

    了解TSINGSEE青犀视频产品的小伙伴应该都知道,随着对国标GB/T28181协议的深入了解,国标GB28181协议视频平台EasyGBS也在不断迭代与优化功能,比如:EasyGBS平台可支持语音对 ...

最新文章

  1. 微信在公众号增开了新广告位 这次是在图文消息头部
  2. MaxCompute+ Geabase 大话健康知识图谱取经之路
  3. 用户金字塔模型详解及在实际运营工作中的意义
  4. C#将对象序列化成JSON字符串
  5. 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)...
  6. 变形 圆形_中山125T圆形玻璃钢冷却塔现场安装
  7. 【Linux系列】centos7中防火墙相关命令
  8. 华为nova 8 Pro 4G现身官网:同样麒麟985 只是没有5G
  9. Python之数据分析(Numpy中的除法和取余、三角函数、ufunc对象的位运算)
  10. Java基础学习总结(46)——JAVA注解快速入门
  11. 书屋(三):《浪潮之巅》品各大百年公司兴衰历程
  12. 理解设计模式——代理模式
  13. linux locale字符集设置,Linux下通过locale来设置字符集
  14. python 直方图 横向_python绘制直方图
  15. 验证方法学覆盖率(一):代码覆盖率
  16. 春节大优惠,蓝牙耳机推荐,低延迟日常通勤必备蓝牙耳机
  17. vue2 props
  18. 《设计你的人生》的部分经典语录
  19. 计算机动画关键技术,计算机动画关键技术综述ppt课件.ppt
  20. pta:2019来了

热门文章

  1. 问道虚拟机服务器地址,问道架设安装详细说明
  2. PL/SQL详细的安装和配置教程(附带网盘下载链接,以及PL/SQL的基本操作与注意事项)
  3. 销售合同管理系统,发票统计。 Excel表格,自带公式,简单操作
  4. 小米登录的HTML源代码,html--登录页面(小米登录)
  5. 社交媒体爬虫------调用微博API获取微博内容
  6. 关于Fluent瞬态计算你必须掌握的3个技巧
  7. ios开发人员行为准则_如何成为iOS开发人员
  8. GCC和C99标准中inline
  9. 笨方法学Python(一)
  10. 力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.3.3 3.4.1企业版/旗舰版框架