研究大华3G设备接入自主视频开发平台

时间:2021-04-19 16:13:51

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/fengshuiyue/article/details/24311977

近期项目上须要接入3G摄像头。因为3G设备的IP不是固定的,所以设计方案是设计一个server记录下登陆到该server上的全部3G设备的信息,这样其它server能够从该设备上获取到3G设备的相关信息后,能够与3G设备进行交互。

可是眼下各个厂家对3G设备主动注冊这块儿相关的文档极少,于是自己研究了一下大华3G设备的主动注冊。

眼下3G设备主动注冊有两种方式,一种是配置DDNS。一种是通过调用大华的车载DVR回调监听函数来实现。相应配置DDNS。这个方式适合单用户的远程控制摄像头,相应我们眼下的项目需求来说不适用,我们选用的另外一种方式。

一、DDNS设备接入方式

尽管配置DDNS不是适用项目型的情况。可是以下我把我查到的相关资料列举一下。为以后做个记录。

1.使用大华默认的DDNS,能够參考博客:http://blog.csdn.net/fengshuiyue/article/details/24313641

2.使用花生壳配置DDNS。參考地址:http://hsk.oray.com/case/ 

打开“使用花生壳+大华硬盘录像机搭建远程视频监控”这一项就可以,例如以下图:

  研究大华3G设备接入自主视频开发平台

二、3G设置主动注冊方式

1.通过web系统进入大华设置界面,设置设备自己主动注冊的IP和Port。例如以下图:

研究大华3G设备接入自主视频开发平台

2.调用大华车载DVR服务监听接口,接口SDK例如以下图

研究大华3G设备接入自主视频开发平台

3.调用监听接口简单測试project,代码例如以下

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include "dhnetsdk.h"
LLONG handle = 0; int CALLBACK ffServiceCallBack( LLONG lHandle, char *ip,
WORD port, LONG lCommand, void *pParam, DWORD dwParamLen,
LDWORD dwUserData)
{
char* deviceNo = NULL;
if (lCommand==1)
{
std::cout<<"*******************************************************"<<std::endl;
deviceNo= (char*)pParam;
std::cout<<"ip:"<<ip<<",port:"<<port<<std::endl;
std::cout<<"lcommand value is "<<lCommand<<std::endl; BOOL ret = CLIENT_ResponseDevReg( deviceNo, ip, port,
1);
if (ret)
{
std::cout<<"client_responseDevReg successfully"<<std::endl;
}else
{
std::cout<<"client_responseDevReg failed"<<std::endl;
}
}else
{
std::cout<<"*******************************************************"<<std::endl;
std::cout<<"ip:"<<ip<<",port:"<<port<<std::endl;
std::cout<<"lcommand value is "<<lCommand<<std::endl;
}
if (handle==0)
{
NET_DEVICEINFO lpDeviceInfo={0};
int error = 0;
handle = CLIENT_LoginEx(
ip,
port,
"admin",
"admin",
2,
deviceNo,
&lpDeviceInfo,
&error
);
switch (error)
{
case 1:
std::cout<<"password不对"<<std::endl;
break;
case 2:
std::cout<<"username不存在"<<std::endl;
break;
case 3:
std::cout<<"登录超时"<<std::endl;
break;
case 4:
std::cout<<"帐号已登录"<<std::endl;
break;
case 5:
std::cout<<"帐号已被锁定"<<std::endl;
break;
case 6:
std::cout<<"帐号被列为黑名单 "<<std::endl;
break;
case 7:
std::cout<<"资源不足,系统忙"<<std::endl;
break;
case 8:
std::cout<<"子连接失败"<<std::endl;
break;
case 9:
std::cout<<"主连接失败"<<std::endl;
break;
case 10:
std::cout<<"超过最大用户连接数"<<std::endl;
break;
} std::cout<<"device sub id is " << deviceNo <<std::endl;
std::cout<<"device serialnum is "<< lpDeviceInfo.sSerialNumber <<std::endl; if (handle)
{
std::cout<<"login successfully,device id is "<<handle<<std::endl;
}else{
std::cout<<"login failed"<<std::endl;
}
} return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i; NET_DEVICEINFO deviceInfo ={0};
unsigned long lLogin;
//Initialize the SDK, set the disconnection callback functions
CLIENT_Init(NULL,0); bool ret = CLIENT_ListenServer(
"192.168.1.116",
9500,
0,
ffServiceCallBack,
123
); //std::cout<<"ret:"<<ret<<std::endl;
//CLIENT_Cleanup(); std::cin>>i;
return 0;
}

4.程序输出结果如图:

研究大华3G设备接入自主视频开发平台

 注: 大华设备的回调函数 fServiceCallBack 中的參数lCommand值能够1或-1。可是文档中并没有做相关的说明,故想问一下,这个參数在不同值时所代表的含义。