前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——报警模块说明

视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——报警模块说明

作者头像
EasyNVR
发布2020-08-31 15:52:33
2K0
发布2020-08-31 15:52:33
举报
文章被收录于专栏:EasyNVR

视频联网云平台EasyCVR是一个集视频联网共享、存储、流媒体转发、视频转码、视频上云、智能分析统一等多种功能为一体的流媒体视频服务融合性平台。EasyCVR可以集成海康EHome私有协议,本文讲一下EasyCVR集成海康EHome协议报警模块。

开启监听服务并接收设备报警信息依赖于中心管理服务(CMS)和报警管理服务(AMS)。监听服务开启后,当报警被触发时,设备会自动上传报警,因此可通过配置监听服务(即AMS)接收报警信息。

开启监听服务并接收报警的接口调用流程图:

操作基本步骤:

1、调用NET_EALARM_StartListen开启AMS报警监听并注册回调函数用于接收报警信息。AMS的IP地址和端口号由CMS发送给设备。

2、当报警触发时,从AMS注册的回调函数中获取报警信息进行处理。

3、调用NET_EALARM_StopListen停止AMS报警监听。

4、调用NET_ECMS_ForceLogout强制注销设备

前提条件: 1、请确保已调用NET_ECMS_Init和NET_EALARM_Init初始化CMS和AMS。 2、请确保已调用NET_ECMS_StartListen开启CMS监听以接收设备注册信息。

如果是ehome v4 版本,设备要设置SessionKey,SessionKey可通过回调数据类型“enum_dev_sessionkey”获得。

开启监听服务并接收报警的示例代码

注:在该示例代码中,CMS和AMS安装在同一台电脑的同一个程序中。

代码语言:javascript
复制
#include <stdio.h>
#include <Windows.h>
#include "HCISUPCMS.h"
#include "HCISUPAlarm.h"
 
LONG lLoginID = -1;
LONG lListenHandle = -1;
 
//
//注册回调函数
BOOL CALLBACK RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser)
{
    if (ENUM_DEV_ON == dwDataType)
    {
        NET_EHOME_DEV_REG_INFO *pDevInfo = (NET_EHOME_DEV_REG_INFO *)pOutBuffer;
 
        if (pDevInfo != NULL)
        {
          lLoginID = lUserID;
          printf("On-line, lUserID: %d, Device ID: %s\n", lLoginID, pDevInfo->byDeviceID);
        }
        //输入参数
        NET_EHOME_SERVER_INFO *pServerInfo = (NET_EHOME_SERVER_INFO *)pInBuffer;
        pServerInfo->dwTimeOutCount = 6; //心跳超时次数
        pServerInfo->dwKeepAliveSec = 15; //心跳间隔
        memcpy(pServerInfo->struUDPAlarmSever.szIP, "10.16.2.123", sizeof("10.16.2.123")); //报警服务器IP地址(TCP协议) 
        pServerInfo->struUDPAlarmSever.wPort = 7200; //报警服务器端口(UDP协议),需要和报警服务器启动监听的端口一致
        pServerInfo->dwAlarmServerType = 0;  //报警服务器类型:0- 只支持UDP协议上报,1- 支持UDP、TCP两种协议上报
    }
    else if (ENUM_DEV_OFF == dwDataType)
    {
        printf("Off-line, lUserID: %d\n", lUserID);
        NET_ECMS_ForceLogout(lUserID);       
    }
    else
    {
    }
 
    return TRUE;
}
 
//
//AMS报警回调函数
BOOL CALLBACK AlarmMSGCallBack(LONG lHandle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData)
{
    lListenHandle = lHandle;
 
    DWORD dwType = pAlarmMsg->dwAlarmType;  //不同的报警类型(dwAlarmType),pAlarmInfo对应不同的报警信息类型
    printf("Callback of alarm listening, dwAlarmType[%d]\n", dwType);
 
    switch(dwType)
    {
    case EHOME_ALARM_UNKNOWN://未知报警信息
        printf("Unknown Alarm Type!\n");
        break;
    case EHOME_ALARM://基本报警信息:移动侦测、视频遮盖、视频丢失、PIR报警、人脸侦测、区域入侵等
        NET_EHOME_ALARM_INFO struAlarmInfo;
        memcpy(&struAlarmInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_ALARM_INFO));
        printf("Basic Alarm: Device ID[%s], szAlarmTime[%s], Alarm Type[%d], Action[%d], VideoChannel[%d]!\n", struAlarmInfo.szDeviceID, \
            struAlarmInfo.szAlarmTime, struAlarmInfo.dwAlarmType, struAlarmInfo.dwAlarmAction, struAlarmInfo.dwVideoChannel);
        break;
    case EHOME_ALARM_HEATMAP_REPORT://热度图报告上传
        NET_EHOME_HEATMAP_REPORT struHeatmapInfo;
        memcpy(&struHeatmapInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_HEATMAP_REPORT));
        printf("Heatmap report: Device ID[%s], StartTime[%s], StopTime[%s], dwVideoChannel[%d]!\n", struHeatmapInfo.byDeviceID, \
            struHeatmapInfo.byStartTime, struHeatmapInfo.byStopTime, struHeatmapInfo.dwVideoChannel);
        break;
    case EHOME_ALARM_FACESNAP_REPORT://人脸抓拍报告上传
        NET_EHOME_FACESNAP_REPORT struFaceSnap;
        memcpy(&struFaceSnap, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_FACESNAP_REPORT));
        printf("Face snap: Device ID[%s], AlarmTime[%s], dwFaceScore[%d], dwVideoChannel[%d]!\n", struFaceSnap.byDeviceID, \
            struFaceSnap.byAlarmTime, struFaceSnap.dwFaceScore, struFaceSnap.dwVideoChannel);
        break;
    case EHOME_ALARM_GPS://GPS信息上传
        NET_EHOME_GPS_INFO struGpsInfo;
        memcpy(&struGpsInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_GPS_INFO));
        printf("GPS info: Device ID[%s], SampleTime[%s], Longitude[%d], Latitude[%d]!\n", struGpsInfo.byDeviceID, \
            struGpsInfo.bySampleTime, struGpsInfo.dwLongitude, struGpsInfo.dwLatitude );
        break;
    case EHOME_ALARM_CID_REPORT://报警主机CID报警信息
        NET_EHOME_CID_INFO struCIDInfo;
        memcpy(&struCIDInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_CID_INFO));
        printf("CID info: Device ID[%s], AlarmTime[%s], CID Code[%d], CID Type[%d], CID Describe[%s]!\n", struCIDInfo.byDeviceID, \
        struCIDInfo.byTriggerTime, struCIDInfo.dwCIDCode, struCIDInfo.dwCIDType, struCIDInfo.byCIDDescribe );
        break;
    default:
        break;
    }
 
    return TRUE;
}
 
void main(){
 
    
    //开启AMS报警监听
 
    //AMS初始化
    NET_EALARM_Init();
 
    //报警监听参数
    NET_EHOME_ALARM_LISTEN_PARAM struListen = {0};
    memcpy(struListen.struAddress.szIP, "10.16.2.123", sizeof("10.16.2.123"));
    struListen.struAddress.wPort = 7200; //报警服务的监听端口
    struListen.fnMsgCb = AlarmMSGCallBack; //报警回调函数
    struListen.pUserData = NULL;
    struListen.byProtocolType = 1; //0- TCP方式(保留,暂不支持),1- UDP方式
 
    //启动报警监听
    LONG lHandle = NET_EALARM_StartListen(&struListen);
    if(lHandle < -1)
    {
        printf("NET_EALARM_StartListen failed, error code: %d\n", NET_EALARM_GetLastError());
        NET_EALARM_Fini();
        return;
    }
    printf("NET_EALARM_StartListen!\n");
    //
 
    
    //CMS注册模块初始化
    NET_ECMS_Init();
 
    //注册监听参数
    NET_EHOME_CMS_LISTEN_PARAM struCMSListenPara = {0};
    memcpy(struCMSListenPara.struAddress.szIP, "0.0.0.0", sizeof("0.0.0.0"));
    struCMSListenPara.struAddress.wPort = 7660;
    struCMSListenPara.fnCB = RegisterCallBack;
 
    //启动监听,接收设备注册信息,注册回调函数里面需要发送报警主机IP和端口给设备
    LONG lListen = NET_ECMS_StartListen(&struCMSListenPara);
    if(lListen < -1)
    {
        printf("NET_ECMS_StartListen failed, error code: %d\n", NET_ECMS_GetLastError());
        NET_ECMS_Fini();
        return;
    }
    printf("NET_ECMS_StartListen!\n");
 
    while(1)
    {
        Sleep(1000);  //注册成功之后再做后续操作
        if(lLoginID >= 0)
        {
            break;
        }
    }
 
    Sleep(300000); //等待5分钟,接收报警信息
 
    
    //退出
 
    //CMS停止监听
    if(!NET_ECMS_StopListen(lListen))
    {
        printf("NET_ECMS_StopListen failed, error code: %d\n", NET_ECMS_GetLastError());
    }
 
    //CMS反初始化,释放资源
    NET_ECMS_Fini();
 
    //AMS停止报警监听
    if(lListenHandle >= 0)
    {
        if (!NET_EALARM_StopListen(lListenHandle))
        {
            printf("NET_EALARM_StopListen failed, error code: %d\n", NET_ECMS_GetLastError());
        }
    }
    //AMS反初始化,释放资源
    NET_EALARM_Fini();
 
    printf("Exit!");
}

 如果大家还想了解更多关于EasyCVR集成海康EHome私有协议的调用和说明,可以翻阅TSINGSEE青犀视频往期相关文章,其中包括:设备录像回看说明、语音对讲操作流程、Ehome协议调用流程介绍等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开启监听服务并接收报警的接口调用流程图:
  • 操作基本步骤:
  • 开启监听服务并接收报警的示例代码
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档