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

最近项目上需要接入3G摄像头,由于3G设备的IP不是固定的,所以设计方案是设计一个服务器记录下登陆到该服务器上的所有3G设备的信息,这样其他服务器可以从该设备上获取到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设置主动注册方式

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


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


3.调用监听接口简单测试工程,代码如下

#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<<"密码不正确"<<std::endl;
			break;
		case 2:
			std::cout<<"用户名不存在"<<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.程序输出结果如图:



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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风水月

从心底相信自己是成功的第一步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值